diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index 07c1d0adb3d..439e3ca76bf 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -269,6 +269,12 @@ var/global/datum/shuttle_controller/shuttle_controller 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)) + 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)) diff --git a/code/game/machinery/embedded_controller/escape_pod_docking_controller.dm b/code/game/machinery/embedded_controller/escape_pod_docking_controller.dm index 44207e75973..5571ef2fc58 100644 --- a/code/game/machinery/embedded_controller/escape_pod_docking_controller.dm +++ b/code/game/machinery/embedded_controller/escape_pod_docking_controller.dm @@ -1,12 +1,58 @@ +//This controller goes on the escape pod itself /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod + var/datum/shuttle/ferry/pod + +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + var/data[0] + + data = list( + "docking_status" = docking_program.get_docking_status(), + "override_enabled" = docking_program.override_enabled, + "door_state" = docking_program.memory["door_status"]["state"], + "door_lock" = docking_program.memory["door_status"]["lock"], + "can_force" = pod.can_force(), + ) + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + + if (!ui) + ui = new(user, src, ui_key, "simple_docking_console_pod.tmpl", name, 470, 290) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/Topic(href, href_list) + if(..()) + return + + usr.set_machine(src) + src.add_fingerprint(usr) + + var/clean = 0 + switch(href_list["command"]) //anti-HTML-hacking checks + if("force_door") + clean = 1 + if("toggle_override") + clean = 1 + if("force_launch") + pod.force_launch(src) + + if(clean) + program.receive_user_command(href_list["command"]) + + return 1 + + +//This controller is for the escape pod berth (station side) +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth name = "escape pod berth controller" -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/initialize() +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/initialize() ..() docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src) program = docking_program -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) var/data[0] var/armed = null @@ -28,7 +74,7 @@ ui.open() ui.set_auto_update(1) -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/card/emag) && !emagged) user << "\blue You emag the [src], arming the escape pod!" emagged = 1 @@ -43,7 +89,7 @@ //A docking controller program for a simple door based docking port /datum/computer/file/embedded_program/docking/simple/escape_pod var/armed = 0 - var/eject_delay = 15 //give latecomers some time to get out of the way if they don't make it onto the pod + 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 diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index 016e43d76bf..c4fa3ea5a2e 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -235,7 +235,9 @@ return ..() /datum/shuttle/ferry/escape_pod/can_force() - return 0 + 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 + return ..() /datum/shuttle/ferry/escape_pod/can_cancel() return 0 diff --git a/nano/templates/simple_docking_console_pod.tmpl b/nano/templates/simple_docking_console_pod.tmpl new file mode 100644 index 00000000000..520d0739079 --- /dev/null +++ b/nano/templates/simple_docking_console_pod.tmpl @@ -0,0 +1,101 @@ +