From 3db85775fde16d16e41e5d96759e70fde4b5303d Mon Sep 17 00:00:00 2001 From: Geeves Date: Fri, 29 Sep 2023 23:58:08 +0200 Subject: [PATCH] Escape Pod Escapes (#17436) * Escape Pod Escapes * changelog newline * she merge on my artifact till i changelog required --- code/modules/shuttles/escape_pods.dm | 41 ++++++++++++++++++++-------- html/changelogs/geeves-pod_emag.yml | 7 +++++ 2 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 html/changelogs/geeves-pod_emag.yml diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index e7d3f14dcf3..6c95c65e149 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -31,8 +31,10 @@ var/list/escape_pods_by_name = list() return ..() /datum/shuttle/autodock/ferry/escape_pod/can_force() - if (arming_controller.eject_time && world.time < arming_controller.eject_time + 50) - return 0 //dont allow force launching until 5 seconds after the arming controller has reached it's countdown + 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() @@ -75,6 +77,18 @@ var/list/escape_pods_by_name = list() pod.launch(src) return TRUE +/obj/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/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth @@ -104,21 +118,26 @@ var/list/escape_pods_by_name = list() ) /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/emag_act(var/remaining_charges, var/mob/user) - if (!emagged) - to_chat(user, "You emag the [src], arming the escape pod!") - emagged = 1 - 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 - if (!P.armed) - P.arm() + 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 = 0 + 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 = 0 + var/closing = FALSE /datum/computer/file/embedded_program/docking/simple/escape_pod/proc/arm() if(!armed) diff --git a/html/changelogs/geeves-pod_emag.yml b/html/changelogs/geeves-pod_emag.yml new file mode 100644 index 00000000000..e73b16a38ee --- /dev/null +++ b/html/changelogs/geeves-pod_emag.yml @@ -0,0 +1,7 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Emagging an escape pod's controller or berth controller will now arm it and allow the pod to be ejected regardless of evacuation status." + - bugfix: "Fixed button presses in the escape pod controller not doing anything."