From eb8f7a0494b67a4058d289e862f3f2f736fbb0c8 Mon Sep 17 00:00:00 2001 From: spookydonut Date: Fri, 8 Mar 2019 23:56:16 +0800 Subject: [PATCH] Adds two shuttle states more functionality (#43005) * Adds two shuttle states more functionality * typo * changes as requested to the pirate shuttle --- code/__DEFINES/shuttles.dm | 2 ++ code/modules/events/pirates.dm | 22 +--------------------- code/modules/shuttle/computer.dm | 3 +++ code/modules/shuttle/shuttle.dm | 24 ++++++++++++++++++++---- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index c8a583a55ea..14d9060b84b 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -7,6 +7,8 @@ #define SHUTTLE_STRANDED "stranded" #define SHUTTLE_ESCAPE "escape" #define SHUTTLE_ENDGAME "endgame: game over" +#define SHUTTLE_RECHARGING "recharging" +#define SHUTTLE_PREARRIVAL "landing" #define EMERGENCY_IDLE_OR_RECALLED (SSshuttle.emergency && ((SSshuttle.emergency.mode == SHUTTLE_IDLE) || (SSshuttle.emergency.mode == SHUTTLE_RECALL))) #define EMERGENCY_ESCAPED_OR_ENDGAMED (SSshuttle.emergency && ((SSshuttle.emergency.mode == SHUTTLE_ESCAPE) || (SSshuttle.emergency.mode == SHUTTLE_ENDGAME))) diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index b2402de2a72..70d75c8077c 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -198,27 +198,7 @@ /obj/docking_port/mobile/pirate name = "pirate shuttle" id = "pirateship" - var/engines_cooling = FALSE - var/engine_cooldown = 3 MINUTES - -/obj/docking_port/mobile/pirate/getStatusText() - . = ..() - if(engines_cooling) - return "[.] - Engines cooling." - -/obj/docking_port/mobile/pirate/initiate_docking(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE) - . = ..() - if(. == DOCKING_SUCCESS && !is_reserved_level(new_dock.z)) - engines_cooling = TRUE - addtimer(CALLBACK(src,.proc/reset_cooldown),engine_cooldown,TIMER_UNIQUE) - -/obj/docking_port/mobile/pirate/proc/reset_cooldown() - engines_cooling = FALSE - -/obj/docking_port/mobile/pirate/canMove() - if(engines_cooling) - return FALSE - return ..() + rechargeTime = 3 MINUTES /obj/machinery/suit_storage_unit/pirate suit_type = /obj/item/clothing/suit/space diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 7f603b3c61f..7ee5a9eab75 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -51,6 +51,9 @@ to_chat(usr, "You've already escaped. Never going back to that place again!") return if(no_destination_swap) + if(M.mode == SHUTTLE_RECHARGING) + to_chat(usr, "Shuttle engines are not ready for use.") + return if(M.mode != SHUTTLE_IDLE) to_chat(usr, "Shuttle already in transit.") return diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 10c955fc263..d706fc4d18e 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -241,6 +241,8 @@ var/mode = SHUTTLE_IDLE //current shuttle mode var/callTime = 100 //time spent in transit (deciseconds). Should not be lower then 10 seconds without editing the animation of the hyperspace ripples. var/ignitionTime = 55 // time spent "starting the engines". Also rate limits how often we try to reserve transit space if its ever full of transiting shuttles. + var/rechargeTime = 0 // time spent after arrival before being able to begin ignition + var/prearrivalTime = 0 // time spent after transit 'landing' before actually arriving // The direction the shuttle prefers to travel in var/preferred_direction = NORTH @@ -534,7 +536,11 @@ // If we can't dock or we don't have a transit slot, wait for 20 ds, // then try again switch(mode) - if(SHUTTLE_CALL) + if(SHUTTLE_CALL, SHUTTLE_PREARRIVAL) + if(prearrivalTime && mode != SHUTTLE_PREARRIVAL) + mode = SHUTTLE_PREARRIVAL + setTimer(prearrivalTime) + return var/error = initiate_docking(destination, preferred_direction) if(error && error & (DOCKING_NULL_DESTINATION | DOCKING_NULL_SOURCE)) var/msg = "A mobile dock in transit exited initiate_docking() with an error. This is most likely a mapping problem: Error: [error], ([src]) ([previous][ADMIN_JMP(previous)] -> [destination][ADMIN_JMP(destination)])" @@ -545,6 +551,10 @@ else if(error) setTimer(20) return + if(rechargeTime) + mode = SHUTTLE_RECHARGING + setTimer(rechargeTime) + return if(SHUTTLE_RECALL) if(initiate_docking(previous) != DOCKING_SUCCESS) setTimer(20) @@ -647,6 +657,10 @@ return "ESC" if(SHUTTLE_STRANDED) return "ERR" + if(SHUTTLE_RECHARGING) + return "RCH" + if(SHUTTLE_PREARRIVAL) + return "LDN" return "" // returns 5-letter timer string, used by status screens and mob status panel @@ -665,7 +679,7 @@ /obj/docking_port/mobile/proc/getStatusText() var/obj/docking_port/stationary/dockedAt = get_docked() - + var/docked_at = dockedAt?.name || "unknown" if(istype(dockedAt, /obj/docking_port/stationary/transit)) if (timeLeft() > 1 HOURS) return "hyperspace" @@ -676,8 +690,10 @@ else dst = destination . = "transit towards [dst?.name || "unknown location"] ([getTimerStr()])" + else if(mode == SHUTTLE_RECHARGING) + return "[docked_at], recharging [getTimerStr()]" else - return dockedAt?.name || "unknown" + return docked_at /obj/docking_port/mobile/proc/getDbgStatusText() @@ -766,7 +782,7 @@ /obj/docking_port/mobile/proc/in_flight() switch(mode) - if(SHUTTLE_CALL,SHUTTLE_RECALL) + if(SHUTTLE_CALL,SHUTTLE_RECALL,SHUTTLE_PREARRIVAL) return TRUE if(SHUTTLE_IDLE,SHUTTLE_IGNITING) return FALSE