load the emergency shuttle in late mapping (#30854)

* load the emergency shuttle in late mapping

* fix lints

* register the late loading docking port properly

* fix logging
This commit is contained in:
warriorstar-orion
2025-12-24 10:42:46 -05:00
committed by GitHub
parent e436df7051
commit 05108670a7
6 changed files with 641 additions and 1511 deletions
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -24,7 +24,6 @@ SUBSYSTEM_DEF(shuttle)
//emergency shuttle stuff
var/obj/docking_port/mobile/emergency/emergency
var/obj/docking_port/mobile/emergency/backup/backup_shuttle
var/emergencyCallTime = SHUTTLE_CALLTIME //time taken for emergency shuttle to reach the station when called (in deciseconds)
var/emergencyDockTime = SHUTTLE_DOCKTIME //time taken for emergency shuttle to leave again once it has docked (in deciseconds)
var/emergencyEscapeTime = SHUTTLE_ESCAPETIME //time taken for emergency shuttle to reach a safe distance after leaving station (in deciseconds)
@@ -63,8 +62,6 @@ SUBSYSTEM_DEF(shuttle)
var/transit_utilized = 0
/datum/controller/subsystem/shuttle/Initialize()
if(!backup_shuttle)
WARNING("No /obj/docking_port/mobile/emergency/backup placed on the map!")
if(!supply)
WARNING("No /obj/docking_port/mobile/supply placed on the map!")
@@ -143,17 +140,8 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/requestEvac(mob/user, call_reason)
if(!emergency)
WARNING("requestEvac(): There is no emergency shuttle, but the shuttle was called. Using the backup shuttle instead.")
if(!backup_shuttle)
WARNING("requestEvac(): There is no emergency shuttle, or backup shuttle!\
The game will be unresolvable.This is possibly a mapping error, \
more likely a bug with the shuttle \
manipulation system, or badminry. It is possible to manually \
resolve this problem by loading an emergency shuttle template \
manually, and then calling register() on the mobile docking port. \
Good luck.")
return
emergency = backup_shuttle
WARNING("requestEvac(): There is no emergency shuttle, but the shuttle was called. Loading a default shuttle.")
load_initial_emergency_shuttle("emergency_cyb")
if(secondsToRefuel())
to_chat(user, "The emergency shuttle is refueling. Please wait another [abs(round(((world.time - SSticker.round_start_time) - refuel_delay)/600))] minutes before trying again.")
@@ -196,14 +184,6 @@ SUBSYSTEM_DEF(shuttle)
return
// Called when an emergency shuttle mobile docking port is
// destroyed, which will only happen with admin intervention
/datum/controller/subsystem/shuttle/proc/emergencyDeregister()
// When a new emergency shuttle is created, it will override the
// backup shuttle.
emergency = backup_shuttle
/datum/controller/subsystem/shuttle/proc/cancelEvac(mob/user)
if(canRecall())
emergency.cancel(get_area(user))
@@ -591,6 +571,26 @@ SUBSYSTEM_DEF(shuttle)
SIGNAL_HANDLER
transit_utilized -= (source.width + 2) * (source.height + 2)
/datum/controller/subsystem/shuttle/proc/load_initial_emergency_shuttle(shuttle_id)
if(emergency)
log_debug("requested to load initial emergency shuttle when one already exists")
return
var/obj/docking_port/docking_port = SSshuttle.getDock("emergency_away")
if(!istype(docking_port))
log_debug("could not find docking port")
return
var/datum/map_template/shuttle/shuttle_template = GLOB.shuttle_templates[shuttle_id]
if(!shuttle_template)
log_debug("could not find shuttle template")
return
var/obj/docking_port/mobile/mobile_port = SSshuttle.load_template(shuttle_template)
mobile_port.dock(docking_port, force = TRUE)
mobile_port.register()
emergency = mobile_port
#undef CALL_SHUTTLE_REASON_LENGTH
#undef MAX_TRANSIT_REQUEST_RETRIES
#undef MAX_TRANSIT_TILE_COUNT
@@ -14,12 +14,19 @@ SUBSYSTEM_DEF(late_mapping)
GLOB.air_alarms = sortAtom(GLOB.air_alarms)
GLOB.apcs = sortAtom(GLOB.apcs)
// Load an emergency shuttle at centcom
if(SSmapping.emergency_shuttle_id)
SSshuttle.load_initial_emergency_shuttle(SSmapping.emergency_shuttle_id)
else
WARNING("no valid emergency shuttle template was set in SSmapping")
if(SSmapping.trader_shuttle_id)
var/template = new SSmapping.trader_shuttle_id()
SSshuttle.set_trader_shuttle(template)
else
WARNING("no valid trader shuttle template was set in SSmapping")
// Load a Gamma Armoury shuttle at Centcom.
if(SSmapping.gamma_armory_shuttle_id)
SSshuttle.load_initial_gamma_armory_shuttle(SSmapping.gamma_armory_shuttle_id)
else
@@ -12,6 +12,8 @@ SUBSYSTEM_DEF(mapping)
var/datum/map_template/shuttle/trader_shuttle_id = /datum/map_template/shuttle/trader/synthetic
/// The Gamma Armory shuttle to load at Centcom in late_mapping.
var/gamma_armory_shuttle_id = "gamma_armory_base"
/// The emergency shuttle to load at Centcom in late_mapping
var/emergency_shuttle_id = "emergency_cyb"
/// List of all areas that can be accessed via IC means
var/list/teleportlocs
/// List of all areas that can be accessed via IC and OOC means
+5 -19
View File
@@ -295,12 +295,11 @@
return 1
/obj/docking_port/mobile/emergency/Destroy(force)
if(force)
// This'll make the shuttle subsystem use the backup shuttle.
if(SSshuttle.emergency == src)
// If we're the selected emergency shuttle
SSshuttle.emergencyDeregister()
if(force && SSshuttle.emergency == src)
// If we're the selected emergency shuttle
var/msg = "The emergency mobile docking port has been forcibly destroyed. An emergency shuttle may need to be loaded in."
stack_trace(msg)
log_and_message_admins_no_usr(msg)
return ..()
@@ -630,19 +629,6 @@
var/turf/T = pick(turfs)
src.loc = T
/obj/docking_port/mobile/emergency/backup
name = "backup shuttle"
id = "backup"
dwidth = 2
width = 8
height = 8
/obj/docking_port/mobile/emergency/backup/register()
var/current_emergency = SSshuttle.emergency
..()
SSshuttle.emergency = current_emergency
SSshuttle.backup_shuttle = src
#undef NOT_BEGUN
#undef STAGE_1
#undef STAGE_2
+1 -6
View File
@@ -187,12 +187,7 @@
if("load")
shuttle_and_preview_cooldown = world.time + PREVIEW_OR_SHUTTLE_SPAWN_COOLDOWN
var/datum/map_template/shuttle/S = GLOB.shuttle_templates[params["shuttle_id"]]
if(existing_shuttle == SSshuttle.backup_shuttle)
// TODO make the load button disabled
WARNING("The shuttle that the selected shuttle will replace \
is the backup shuttle. Backup shuttle is required to be \
intact for round sanity.")
else if(S)
if(S)
// If successful, returns the mobile docking port
var/obj/docking_port/mobile/mdp = action_load(S)
if(mdp)