Files
Fluffy 7265630dde Turn more unmanaged global vars into GLOB (#20446)
Turned a ton of unmanaged globals into managed globals.
Refactored some UT output.
Removed some unused things, including vars.
Added a test to ensure people don't keep adding new unmanaged vars.
2025-02-17 23:34:02 +00:00

185 lines
7.4 KiB
Plaintext

#define EVAC_OPT_ABANDON_SHIP "abandon_ship"
#define EVAC_OPT_BLUESPACE_JUMP "bluespace_jump"
#define EVAC_OPT_CREW_TRANSFER "crew_transfer"
#define EVAC_OPT_CANCEL_ABANDON_SHIP "cancel_abandon_ship"
#define EVAC_OPT_CANCEL_BLUESPACE_JUMP "cancel_bluespace_jump"
#define EVAC_OPT_CANCEL_CREW_TRANSFER "cancel_crew_transfer"
// Apparently, emergency_evacuation --> "abandon ship" and !emergency_evacuation --> "bluespace jump"
// That stuff should be moved to the evacuation option datums but someone can do that later
/datum/evacuation_controller/starship
name = "escape pod controller"
transfer_prep_additional_delay = 0 MINUTES
autotransfer_prep_additional_delay = 0 MINUTES
emergency_prep_additional_delay = 0 MINUTES
evacuation_options = list(
EVAC_OPT_ABANDON_SHIP = new /datum/evacuation_option/abandon_ship(),
EVAC_OPT_BLUESPACE_JUMP = new /datum/evacuation_option/bluespace_jump(),
EVAC_OPT_CREW_TRANSFER = new /datum/evacuation_option/crew_transfer(),
EVAC_OPT_CANCEL_ABANDON_SHIP = new /datum/evacuation_option/cancel_abandon_ship(),
EVAC_OPT_CANCEL_BLUESPACE_JUMP = new /datum/evacuation_option/cancel_bluespace_jump(),
EVAC_OPT_CANCEL_CREW_TRANSFER = new /datum/evacuation_option/cancel_crew_transfer()
)
/datum/evacuation_controller/starship/finish_preparing_evac()
. = ..()
// Arm the escape pods.
if(evacuation_type == TRANSFER_EMERGENCY)
for (var/datum/shuttle/autodock/ferry/escape_pod/pod in GLOB.escape_pods)
if (pod.arming_controller)
pod.arming_controller.arm()
/datum/evacuation_controller/starship/launch_evacuation()
state = EVAC_IN_TRANSIT
switch(evacuation_type)
if("evacuation")
// Abandon Ship
for(var/datum/shuttle/autodock/ferry/escape_pod/pod in GLOB.escape_pods) // Launch the pods!
if(!pod.arming_controller || pod.arming_controller.armed)
pod.move_time = (evac_transit_delay/10)
pod.launch(src)
priority_announcement.Announce(replacetext(replacetext(SSatlas.current_map.emergency_shuttle_leaving_dock, "%dock_name%", "[SSatlas.current_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s"))
if(TRANSFER_JUMP)
// Bluespace Jump
priority_announcement.Announce(replacetext(replacetext(SSatlas.current_map.bluespace_leaving_dock, "%dock_name%", "[SSatlas.current_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s"))
SetUniversalState(/datum/universal_state/bluespace_jump, arguments=list(SSmapping.levels_by_trait(ZTRAIT_STATION)))
if(TRANSFER_CREW)
priority_announcement.Announce(replacetext(replacetext(SSatlas.current_map.shuttle_leaving_dock, "%dock_name%", "[SSatlas.current_map.dock_name]"), "%ETA%", "[round(get_eta()/60,1)] minute\s"))
/datum/evacuation_controller/starship/finish_evacuation()
..()
if(evacuation_type == TRANSFER_JUMP) //bluespace jump
SetUniversalState(/datum/universal_state) //clear jump state
/datum/evacuation_controller/starship/available_evac_options()
if (is_on_cooldown())
return list()
if (is_idle())
return list(evacuation_options[EVAC_OPT_BLUESPACE_JUMP], evacuation_options[EVAC_OPT_ABANDON_SHIP])
if (is_evacuating())
switch(evacuation_type)
if(TRANSFER_EMERGENCY)
return list(evacuation_options[EVAC_OPT_CANCEL_ABANDON_SHIP])
if(TRANSFER_JUMP)
return list(evacuation_options[EVAC_OPT_CANCEL_BLUESPACE_JUMP])
if(TRANSFER_CREW)
return list(evacuation_options[EVAC_OPT_CANCEL_CREW_TRANSFER])
/datum/evacuation_option/abandon_ship
option_text = "Abandon spacecraft"
option_desc = "abandon the spacecraft"
option_target = EVAC_OPT_ABANDON_SHIP
needs_syscontrol = TRUE
silicon_allowed = TRUE
abandon_ship = TRUE
/datum/evacuation_option/abandon_ship/execute(mob/user)
if (!GLOB.evacuation_controller)
return
if (GLOB.evacuation_controller.deny)
to_chat(user, "Unable to initiate escape procedures.")
return
if (GLOB.evacuation_controller.is_on_cooldown())
to_chat(user, GLOB.evacuation_controller.get_cooldown_message())
return
if (GLOB.evacuation_controller.is_evacuating())
to_chat(user, "Escape procedures already in progress.")
return
if (GLOB.evacuation_controller.call_evacuation(user, 1))
log_and_message_admins("[user? key_name(user) : "Autotransfer"] has initiated abandonment of the spacecraft.")
/datum/evacuation_option/bluespace_jump
option_text = "Initiate bluespace jump"
option_desc = "initiate a bluespace jump"
option_target = EVAC_OPT_BLUESPACE_JUMP
needs_syscontrol = TRUE
silicon_allowed = TRUE
/datum/evacuation_option/bluespace_jump/execute(mob/user)
if (!GLOB.evacuation_controller)
return
if (GLOB.evacuation_controller.deny)
to_chat(user, "Unable to initiate jump preparation.")
return
if (GLOB.evacuation_controller.is_on_cooldown())
to_chat(user, GLOB.evacuation_controller.get_cooldown_message())
return
if (GLOB.evacuation_controller.is_evacuating())
to_chat(user, "Jump preparation already in progress.")
return
if (GLOB.evacuation_controller.call_evacuation(user, 0))
log_and_message_admins("[user? key_name(user) : "Autotransfer"] has initiated bluespace jump preparation.")
/datum/evacuation_option/crew_transfer
option_text = "Initiate crew transfer"
option_desc = "initiate a crew transfer"
option_target = EVAC_OPT_CREW_TRANSFER
needs_syscontrol = TRUE
silicon_allowed = TRUE
/datum/evacuation_option/crew_transfer/execute(mob/user)
if(!GLOB.evacuation_controller)
return
if(GLOB.evacuation_controller.deny)
to_chat(user, "Unable to initiate crew transfer preparation.")
return
if(GLOB.evacuation_controller.is_on_cooldown())
to_chat(user, GLOB.evacuation_controller.get_cooldown_message())
return
if(GLOB.evacuation_controller.is_evacuating())
to_chat(user, "Crew transfer preparation already in progress.")
return
if(GLOB.evacuation_controller.call_evacuation(user, 0))
log_and_message_admins("[user? key_name(user) : "Autotransfer"] has initiated crew transfer preparation.")
/datum/evacuation_option/cancel_abandon_ship
option_text = "Cancel abandonment"
option_desc = "cancel abandonment of the spacecraft"
option_target = EVAC_OPT_CANCEL_ABANDON_SHIP
needs_syscontrol = TRUE
silicon_allowed = FALSE
/datum/evacuation_option/cancel_abandon_ship/execute(mob/user)
if (GLOB.evacuation_controller?.cancel_evacuation())
log_and_message_admins("[key_name(user)] has cancelled abandonment of the spacecraft.")
/datum/evacuation_option/cancel_bluespace_jump
option_text = "Cancel bluespace jump"
option_desc = "cancel the jump preparation"
option_target = EVAC_OPT_CANCEL_BLUESPACE_JUMP
needs_syscontrol = TRUE
silicon_allowed = FALSE
/datum/evacuation_option/cancel_bluespace_jump/execute(mob/user)
if (GLOB.evacuation_controller?.cancel_evacuation())
log_and_message_admins("[key_name(user)] has cancelled the bluespace jump.")
/datum/evacuation_option/cancel_crew_transfer
option_text = "Cancel crew transfer"
option_desc = "cancel the crew transfer preparation"
option_target = EVAC_OPT_CANCEL_BLUESPACE_JUMP
needs_syscontrol = TRUE
silicon_allowed = FALSE
/datum/evacuation_option/cancel_crew_transfer/execute(mob/user)
if(GLOB.evacuation_controller?.cancel_evacuation())
log_and_message_admins("[key_name(user)] has cancelled the crew transfer.")
/atom/movable/screen/fullscreen/bluespace_overlay
icon = 'icons/effects/effects.dmi'
icon_state = "mfoam"
screen_loc = "WEST,SOUTH to EAST,NORTH"
color = "#ff9900"
blend_mode = BLEND_SUBTRACT
#undef EVAC_OPT_ABANDON_SHIP
#undef EVAC_OPT_BLUESPACE_JUMP
#undef EVAC_OPT_CANCEL_ABANDON_SHIP
#undef EVAC_OPT_CANCEL_BLUESPACE_JUMP