From a3926a51ebbb5865ce3f05db83b2a1cc0c45a1ff Mon Sep 17 00:00:00 2001 From: XDTM Date: Mon, 24 Sep 2018 11:30:07 +0200 Subject: [PATCH] [Ready]Bluespace research updates (#40245) * Quantum Keycards * Bluespace research updates * . * .. * codersprites * costier * moved portal gun * removes hand tele --- code/game/machinery/quantum_pad.dm | 41 +++++++++++------- .../objects/items/devices/quantum_keycard.dm | 32 ++++++++++++++ code/modules/research/designs/misc_designs.dm | 10 +++++ code/modules/research/techweb/all_nodes.dm | 28 +++++++----- icons/obj/device.dmi | Bin 43527 -> 44105 bytes tgstation.dme | 1 + 6 files changed, 87 insertions(+), 25 deletions(-) create mode 100644 code/game/objects/items/devices/quantum_keycard.dm diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 7a8552607b5..0d9eb6e91f9 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -73,16 +73,27 @@ else to_chat(user, "There is no quantum pad data saved in [I]'s buffer!") return TRUE + + else if(istype(I, /obj/item/quantum_keycard)) + var/obj/item/quantum_keycard/K = I + if(K.qpad) + to_chat(user, "You insert [K] into [src]'s card slot, activating it.") + interact(user, K.qpad) + else + to_chat(user, "You insert [K] into [src]'s card slot, initiating the link procedure.") + if(do_after(user, 40, target = src)) + to_chat(user, "You complete the link between [K] and [src].") + K.qpad = src if(default_deconstruction_crowbar(I)) return return ..() -/obj/machinery/quantumpad/interact(mob/user) - if(!linked_pad || QDELETED(linked_pad)) +/obj/machinery/quantumpad/interact(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) + if(!target_pad || QDELETED(target_pad)) if(!map_pad_link_id || !initMappedLink()) - to_chat(user, "There is no linked pad!") + to_chat(user, "Target pad not found!") return if(world.time < last_teleport + teleport_cooldown) @@ -93,15 +104,15 @@ to_chat(user, "[src] is charging up. Please wait.") return - if(linked_pad.teleporting) - to_chat(user, "Linked pad is busy. Please wait.") + if(target_pad.teleporting) + to_chat(user, "Target pad is busy. Please wait.") return - if(linked_pad.stat & NOPOWER) - to_chat(user, "Linked pad is not responding to ping.") + if(target_pad.stat & NOPOWER) + to_chat(user, "Target pad is not responding to ping.") return add_fingerprint(user) - doteleport(user) + doteleport(user, target_pad) /obj/machinery/quantumpad/proc/sparks() var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread @@ -117,8 +128,8 @@ if(linked_pad) ghost.forceMove(get_turf(linked_pad)) -/obj/machinery/quantumpad/proc/doteleport(mob/user) - if(linked_pad) +/obj/machinery/quantumpad/proc/doteleport(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) + if(target_pad) playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1) teleporting = TRUE @@ -130,7 +141,7 @@ to_chat(user, "[src] is unpowered!") teleporting = FALSE return - if(!linked_pad || QDELETED(linked_pad) || linked_pad.stat & NOPOWER) + if(!target_pad || QDELETED(target_pad) || target_pad.stat & NOPOWER) to_chat(user, "Linked pad is not responding to ping. Teleport aborted.") teleporting = FALSE return @@ -141,12 +152,12 @@ // use a lot of power use_power(10000 / power_efficiency) sparks() - linked_pad.sparks() + target_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) + flick("qpad-beam", target_pad) + playsound(get_turf(target_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) @@ -160,7 +171,7 @@ continue else if(!isobserver(ROI)) continue - do_teleport(ROI, get_turf(linked_pad)) + do_teleport(ROI, get_turf(target_pad)) /obj/machinery/quantumpad/proc/initMappedLink() . = FALSE diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm new file mode 100644 index 00000000000..0d96d7604ae --- /dev/null +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -0,0 +1,32 @@ +/obj/item/quantum_keycard + name = "quantum keycard" + desc = "A keycard able to link to a quantum pad's particle signature, allowing other quantum pads to travel there instead of their linked pad." + icon = 'icons/obj/device.dmi' + icon_state = "quantum_keycard" + item_state = "card-id" + lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' + w_class = WEIGHT_CLASS_TINY + var/obj/machinery/quantumpad/qpad + +/obj/item/quantum_keycard/examine(mob/user) + ..() + if(qpad) + to_chat(user, "It's currently linked to a quantum pad.") + to_chat(user, "Alt-click to unlink the keycard.") + else + to_chat(user, "Insert [src] into an active quantum pad to link it.") + +/obj/item/quantum_keycard/AltClick(mob/living/user) + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + to_chat(user, "You start pressing [src]'s unlink button...") + if(do_after(user, 40, target = src)) + to_chat(user, "The keycard beeps twice and disconnects the quantum link.") + qpad = null + +/obj/item/quantum_keycard/update_icon() + if(qpad) + icon_state = "quantum_keycard_on" + else + icon_state = initial(icon_state) \ No newline at end of file diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 08c30ade78d..e7b4592ccc1 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -206,6 +206,16 @@ build_path = /obj/item/locator category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/quantum_keycard + name = "Quantum Keycard" + desc = "Allows for the construction of a quantum keycard." + id = "quantum_keycard" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500, MAT_METAL = 500, MAT_SILVER = 500, MAT_BLUESPACE = 1000) + build_path = /obj/item/quantum_keycard + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING /datum/design/anomaly_neutralizer name = "Anomaly Neutralizer" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index f105010697b..0fadfdeee0f 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -171,18 +171,26 @@ display_name = "Basic Bluespace Theory" description = "Basic studies into the mysterious alternate dimension known as bluespace." prereq_ids = list("base") - design_ids = list("beacon", "xenobioconsole", "telesci_gps") + design_ids = list("beacon", "xenobioconsole", "telesci_gps", "bluespace_crystal") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 -/datum/techweb_node/adv_bluespace - id = "adv_bluespace" - display_name = "Advanced Bluespace Research" - description = "Deeper understanding of how the Bluespace dimension works" - prereq_ids = list("practical_bluespace", "high_efficiency") - design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console", - "teleconsole", "bag_holding", "bluespace_crystal", "wormholeprojector", "bluespace_pod") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000) +/datum/techweb_node/bluespace_travel + id = "bluespace_travel" + display_name = "Bluespace Travel" + description = "Application of Bluespace for static teleportation technology." + prereq_ids = list("practical_bluespace") + design_ids = list("tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console", "bluespace_pod") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + export_price = 5000 + +/datum/techweb_node/micro_bluespace + id = "micro_bluespace" + display_name = "Miniaturized Bluespace Research" + description = "Extreme reduction in space required for bluespace engines, leading to portable bluespace technology." + prereq_ids = list("bluespace_travel", "practical_bluespace", "high_efficiency") + design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bag_holding", "quantum_keycard", "wormholeprojector") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) export_price = 5000 /datum/techweb_node/practical_bluespace @@ -198,7 +206,7 @@ id = "bluespace_power" display_name = "Bluespace Power Technology" description = "Even more powerful.. power!" - prereq_ids = list("adv_power", "adv_bluespace") + prereq_ids = list("adv_power", "practical_bluespace") design_ids = list("bluespace_cell", "quadratic_capacitor") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index becb58568ff14b0a8d215f10a556f805b1a920ee..22a790bb87009991699a3e283377571dc07c5cf3 100644 GIT binary patch delta 4279 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