From 2c66db96704dc73b235ff059704a2428ac6a652d Mon Sep 17 00:00:00 2001 From: ExusA <67055922+ExusA@users.noreply.github.com> Date: Wed, 25 Dec 2024 11:15:55 +0800 Subject: [PATCH] Resprites Quantum Pads and Cargo Pads (#27595) * Resprites Quantum Pads and Cargo Pads Adds a new sprite and animation for teleporter pads * Fix rendering layers Makes quantum pads move to a higher layer while active --- code/game/machinery/quantum_pad.dm | 100 +++++++++++++++++------------ icons/obj/telescience.dmi | Bin 3049 -> 3681 bytes 2 files changed, 58 insertions(+), 42 deletions(-) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index a57de59b9f1..f5f31efc6fb 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -1,3 +1,6 @@ +#define QPAD_ANIM_WINDUP 0.8 SECONDS +#define QPAD_ANIM_COOLDOWN 0.7 SECONDS + /obj/machinery/quantumpad name = "quantum pad" desc = "A bluespace quantum-linked telepad used for teleporting objects to other quantum pads." @@ -168,57 +171,70 @@ else to_chat(user, "Linked pad is not on or near any active cameras on the station.") -/obj/machinery/quantumpad/proc/sparks() - do_sparks(5, 1, get_turf(src)) - /obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost) if(!QDELETED(linked_pad)) ghost.forceMove(get_turf(linked_pad)) +/obj/machinery/quantumpad/proc/precharge() + layer = HIGH_OBJ_LAYER + linked_pad.layer = HIGH_OBJ_LAYER + flick("qpad-beam", src) + flick("qpad-beam", linked_pad) + addtimer(CALLBACK(src, PROC_REF(finish_teleport)), max((teleport_speed + QPAD_ANIM_COOLDOWN), 1)) + +/obj/machinery/quantumpad/proc/finish_teleport() + if(!teleporting) + layer = BELOW_OBJ_LAYER + linked_pad.layer = BELOW_OBJ_LAYER + /obj/machinery/quantumpad/proc/doteleport(mob/user) if(linked_pad) playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1) teleporting = TRUE + src.icon_state = "qpad-charge" + linked_pad.icon_state = "qpad-charge" + addtimer(CALLBACK(src, PROC_REF(precharge)), max((teleport_speed - QPAD_ANIM_WINDUP), 1)) + addtimer(CALLBACK(src, PROC_REF(process_teleport)), teleport_speed) - spawn(teleport_speed) - if(!src || QDELETED(src)) - teleporting = FALSE - return - if(stat & NOPOWER) - to_chat(user, "[src] is unpowered!") - teleporting = FALSE - return - if(!linked_pad || QDELETED(linked_pad) || linked_pad.stat & NOPOWER) - to_chat(user, "Linked pad is not responding to ping. Teleport aborted.") - teleporting = FALSE - return +/obj/machinery/quantumpad/proc/process_teleport(mob/user) + if(!src || QDELETED(src)) + teleporting = FALSE + return + if(stat & NOPOWER) + to_chat(user, "[src] is unpowered!") + teleporting = FALSE + return + if(!linked_pad || QDELETED(linked_pad) || linked_pad.stat & NOPOWER) + to_chat(user, "Linked pad is not responding to ping. Teleport aborted.") + teleporting = FALSE + return - teleporting = FALSE - last_teleport = world.time + teleporting = FALSE + last_teleport = world.time - // use a lot of power - use_power(10000 / power_efficiency) - sparks() - linked_pad.sparks() - - flick("qpad-beam", src) - playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, TRUE) - flick("qpad-beam", linked_pad) - playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, TRUE) - var/tele_success = TRUE - for(var/atom/movable/ROI in get_turf(src)) - // if is anchored, don't let through - if(ROI.anchored) - if(isliving(ROI)) - var/mob/living/L = ROI - if(L.buckled) - // TP people on office chairs - if(L.buckled.anchored) - continue - else - continue - else if(!isobserver(ROI)) + // use a lot of power + use_power(10000 / power_efficiency) + playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, TRUE) + playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, TRUE) + var/tele_success = TRUE + for(var/atom/movable/ROI in get_turf(src)) + // if is anchored, don't let through + if(ROI.anchored) + if(isliving(ROI)) + var/mob/living/L = ROI + if(L.buckled) + // TP people on office chairs + if(L.buckled.anchored) continue - tele_success = do_teleport(ROI, get_turf(linked_pad)) - if(!tele_success) - to_chat(user, "Teleport failed due to bluespace interference.") + else + continue + else if(!isobserver(ROI)) + continue + tele_success = do_teleport(ROI, get_turf(linked_pad), do_effect = FALSE) + if(!tele_success) + to_chat(user, "Teleport failed due to bluespace interference.") + src.icon_state = "qpad-idle" + linked_pad.icon_state = "qpad-idle" + +#undef QPAD_ANIM_WINDUP +#undef QPAD_ANIM_COOLDOWN diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index 36daadc9f18c7b4259e89bc9bb0b7fcadc7326ec..290be6c34e8525f33c180add4bffe61f44393645 100644 GIT binary patch literal 3681 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 literal 3049 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 aGa4pK+%(Id83lj+@7$c-o$4He@&5%fnbv&(