From 60bb4fd5bcb2228d7ae3a11506038a4123323c27 Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Wed, 8 Feb 2017 23:55:00 +0400 Subject: [PATCH 1/2] ported quantum pads from TG and added to RnD --- code/game/machinery/constructable_frame.dm | 11 ++ code/game/machinery/quantum_pad.dm | 145 ++++++++++++++++++ .../research/designs/machine_designs.dm | 10 ++ code/modules/shuttle/supply.dm | 3 +- icons/obj/telescience.dmi | Bin 2643 -> 3559 bytes paradise.dme | 1 + 6 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 code/game/machinery/quantum_pad.dm diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 9b03727495a..70f0195ce5d 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -757,6 +757,17 @@ obj/item/weapon/circuitboard/rdserver /obj/item/stack/cable_coil = 1, /obj/item/weapon/stock_parts/console_screen = 1) +/obj/item/weapon/circuitboard/quantumpad + name = "circuit board (Quantum Pad)" + build_path = /obj/machinery/quantumpad + board_type = "machine" + origin_tech = "programming=3;engineering=3;plasmatech=3;bluespace=4" + frame_desc = "Requires 1 Bluespace Crystal, 1 Capacitor, 1 piece of cable and 1 Manipulator." + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 1, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1) /obj/item/weapon/circuitboard/sleeper name = "circuit board (Sleeper)" diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm new file mode 100644 index 00000000000..760ab1d8aea --- /dev/null +++ b/code/game/machinery/quantum_pad.dm @@ -0,0 +1,145 @@ +/obj/machinery/quantumpad + name = "quantum pad" + desc = "A bluespace quantum-linked telepad used for teleporting objects to other quantum pads." + icon = 'icons/obj/telescience.dmi' + icon_state = "qpad-idle" + anchored = 1 + use_power = 1 + idle_power_usage = 200 + active_power_usage = 5000 + var/teleport_cooldown = 400 //30 seconds base due to base parts + var/teleport_speed = 50 + var/last_teleport //to handle the cooldown + var/teleporting = 0 //if it's in the process of teleporting + var/power_efficiency = 1 + var/obj/machinery/quantumpad/linked_pad = null + +/obj/machinery/quantumpad/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/quantumpad(null) + component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/stack/cable_coil(null, 1) + RefreshParts() + +/obj/machinery/quantumpad/RefreshParts() + var/E = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + E += C.rating + power_efficiency = E + E = 0 + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + E += M.rating + teleport_speed = initial(teleport_speed) + teleport_speed -= (E*10) + teleport_cooldown = initial(teleport_cooldown) + teleport_cooldown -= (E * 100) + +/obj/machinery/quantumpad/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "pad-idle-o", "qpad-idle", I)) + return + + if(panel_open) + if(ismultitool(I)) + var/obj/item/device/multitool/M = I + M.buffer = src + to_chat(user, "You save the data in the [I.name]'s buffer.") + return 1 + else if(ismultitool(I)) + var/obj/item/device/multitool/M = I + if(istype(M.buffer, /obj/machinery/quantumpad)) + linked_pad = M.buffer + to_chat(user, "You link the [src] to the one in the [I.name]'s buffer.") + return 1 + + if(exchange_parts(user, I)) + return + + if(default_deconstruction_crowbar(I)) + return + + return ..() + +/obj/machinery/quantumpad/attack_hand(mob/user) + if(panel_open) + to_chat(user, "The panel must be closed before operating this machine!") + return + + if(!linked_pad || qdeleted(linked_pad)) + to_chat(user, "There is no linked pad!") + return + + if(world.time < last_teleport + teleport_cooldown) + to_chat(user, "[src] is recharging power. Please wait [round((last_teleport + teleport_cooldown - world.time) / 10)] seconds.") + return + + if(teleporting) + to_chat(user, "[src] is charging up. Please wait.") + return + + if(linked_pad.teleporting) + to_chat(user, "Linked pad is busy. Please wait.") + return + + if(linked_pad.stat & NOPOWER) + to_chat(user, "Linked pad is not responding to ping.") + return + add_fingerprint(user) + doteleport(user) + return + +/obj/machinery/quantumpad/proc/sparks() + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread + s.set_up(5, 1, get_turf(src)) + s.start() + +/obj/machinery/quantumpad/attack_ghost(mob/dead/observer/ghost) + if(linked_pad) + ghost.forceMove(get_turf(linked_pad)) + +/obj/machinery/quantumpad/proc/doteleport(mob/user) + if(linked_pad) + playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1) + teleporting = 1 + + spawn(teleport_speed) + if(!src || qdeleted(src)) + teleporting = 0 + return + if(stat & NOPOWER) + to_chat(user, "[src] is unpowered!") + teleporting = 0 + return + if(!linked_pad || qdeleted(linked_pad) || linked_pad.stat & NOPOWER) + to_chat(user, "Linked pad is not responding to ping. Teleport aborted.") + teleporting = 0 + return + + teleporting = 0 + 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, 1, extrarange = 3, falloff = 5) + flick("qpad-beam", linked_pad) + playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) + 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)) + continue + do_teleport(ROI, get_turf(linked_pad)) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index b3cd74cc320..c1d3c64d6b9 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -62,6 +62,16 @@ build_path = /obj/item/weapon/circuitboard/power_turbine category = list ("Engineering Machinery") +/datum/design/quantumpad + name = "Machine Board (Quantum Pad Board)" + desc = "The circuit board for a quantum telepad." + id = "quantumpad" + req_tech = list("programming" = 4, "bluespace" = 4, "plasmatech" = 3, "engineering" = 4) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/quantumpad + category = list ("Teleportation Machinery") + /datum/design/telepad name = "Machine Board (Telepad Board)" desc = "Allows for the construction of circuit boards used to build a Telepad." diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index f7b5a36e1a9..e2ba439a0dd 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -246,7 +246,8 @@ /obj/machinery/teleport/station, /obj/machinery/teleport/hub, /obj/machinery/telepad, - /obj/machinery/clonepod + /obj/machinery/clonepod, + /obj/machinery/quantumpad ) if(A) if(is_type_in_list(A, blacklist)) diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index b692f566df150f2808ca17372588ec9d7532d595..dfc41198913f0c09643af2a5ddd12c3214611590 100644 GIT binary patch delta 3431 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 delta 2507 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 Vdv68wm3jaG002ovPDHLkV1mpW(*pni diff --git a/paradise.dme b/paradise.dme index c703c23d96c..15d3c08f39d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -526,6 +526,7 @@ #include "code\game\machinery\portable_tag_turret.dm" #include "code\game\machinery\portable_turret.dm" #include "code\game\machinery\programmable_unloader.dm" +#include "code\game\machinery\quantum_pad.dm" #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm" #include "code\game\machinery\recycler.dm" From 705ff0b398a06dfb9cdc78a9a4297f588d6b4c6d Mon Sep 17 00:00:00 2001 From: uraniummeltdown Date: Fri, 10 Feb 2017 16:20:46 +0400 Subject: [PATCH 2/2] made requested changes --- code/game/machinery/quantum_pad.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 760ab1d8aea..809d0a9b09a 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -24,6 +24,10 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() +/obj/machinery/quantumpad/Destroy() + linked_pad = null + return ..() + /obj/machinery/quantumpad/RefreshParts() var/E = 0 for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) @@ -88,7 +92,6 @@ return add_fingerprint(user) doteleport(user) - return /obj/machinery/quantumpad/proc/sparks() var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread