diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 141afa53e7..d825cb5a23 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -236,3 +236,22 @@ Buildable meters /obj/item/pipe_meter/proc/setAttachLayer(new_layer = PIPING_LAYER_DEFAULT) piping_layer = new_layer PIPING_LAYER_DOUBLE_SHIFT(src, piping_layer) + +/obj/item/pipe/bluespace + pipe_type = /obj/machinery/atmospherics/pipe/bluespace + var/bluespace_network_name = "default" + icon_state = "bluespace" + disposable = FALSE + +/obj/item/pipe/bluespace/attack_self(mob/user) + var/new_name = input(user, "Enter identifier for bluespace pipe network", "bluespace pipe", bluespace_network_name) as text|null + if(!isnull(new_name)) + bluespace_network_name = new_name + +/obj/item/pipe/bluespace/make_from_existing(obj/machinery/atmospherics/pipe/bluespace/make_from) + bluespace_network_name = make_from.bluespace_network_name + return ..() + +/obj/item/pipe/bluespace/build_pipe(obj/machinery/atmospherics/pipe/bluespace/A) + A.bluespace_network_name = bluespace_network_name + return ..() diff --git a/code/modules/atmospherics/machinery/pipes/bluespace.dm b/code/modules/atmospherics/machinery/pipes/bluespace.dm new file mode 100644 index 0000000000..2735a38106 --- /dev/null +++ b/code/modules/atmospherics/machinery/pipes/bluespace.dm @@ -0,0 +1,86 @@ +GLOBAL_LIST_EMPTY(bluespace_pipe_networks) +/obj/machinery/atmospherics/pipe/bluespace + name = "bluespace pipe" + desc = "Transmits gas across large distances of space. Developed using bluespace technology." + icon = 'icons/obj/atmospherics/pipes/bluespace.dmi' + icon_state = "map" + pipe_state = "bluespace" + dir = SOUTH + initialize_directions = SOUTH + device_type = UNARY + can_buckle = FALSE + construction_type = /obj/item/pipe/bluespace + var/bluespace_network_name + +/obj/machinery/atmospherics/pipe/bluespace/New() + icon_state = "pipe" + if(bluespace_network_name) // in case someone maps one in for some reason + if(!GLOB.bluespace_pipe_networks[bluespace_network_name]) + GLOB.bluespace_pipe_networks[bluespace_network_name] = list() + GLOB.bluespace_pipe_networks[bluespace_network_name] |= src + ..() + +/obj/machinery/atmospherics/pipe/bluespace/on_construction() + . = ..() + if(bluespace_network_name) + if(!GLOB.bluespace_pipe_networks[bluespace_network_name]) + GLOB.bluespace_pipe_networks[bluespace_network_name] = list() + GLOB.bluespace_pipe_networks[bluespace_network_name] |= src + +/obj/machinery/atmospherics/pipe/bluespace/Destroy() + if(GLOB.bluespace_pipe_networks[bluespace_network_name]) + GLOB.bluespace_pipe_networks[bluespace_network_name] -= src + for(var/p in GLOB.bluespace_pipe_networks[bluespace_network_name]) + var/obj/machinery/atmospherics/pipe/bluespace/P = p + QDEL_NULL(P.parent) + P.build_network() + return ..() + +/obj/machinery/atmospherics/pipe/bluespace/examine(user) + . = ..() + . += "This one is connected to the \"[html_encode(bluespace_network_name)]\" network." + +/obj/machinery/atmospherics/pipe/bluespace/SetInitDirections() + initialize_directions = dir + +/obj/machinery/atmospherics/pipe/bluespace/pipeline_expansion() + return ..() + GLOB.bluespace_pipe_networks[bluespace_network_name] - src + +/obj/machinery/atmospherics/pipe/bluespace/hide() + update_icon() + +/obj/machinery/atmospherics/pipe/bluespace/update_icon(showpipe) + underlays.Cut() + + var/turf/T = loc + if(level == 2 || !T.intact) + showpipe = TRUE + plane = GAME_PLANE + else + showpipe = FALSE + plane = FLOOR_PLANE + + if(!showpipe) + return //no need to update the pipes if they aren't showing + + var/connected = 0 //Direction bitset + + for(var/i in 1 to device_type) //adds intact pieces + if(nodes[i]) + var/obj/machinery/atmospherics/node = nodes[i] + var/image/img = get_pipe_underlay("pipe_intact", get_dir(src, node), node.pipe_color) + underlays += img + connected |= img.dir + + for(var/direction in GLOB.cardinals) + if((initialize_directions & direction) && !(connected & direction)) + underlays += get_pipe_underlay("pipe_exposed", direction) + +/obj/machinery/atmospherics/pipe/bluespace/paint() + return FALSE + +/obj/machinery/atmospherics/pipe/bluespace/proc/get_pipe_underlay(state, dir, color = null) + if(color) + . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir, color) + else + . = getpipeimage('icons/obj/atmospherics/components/binary_devices.dmi', state, dir) diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index a70449b035..cf6aff5918 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -105,3 +105,13 @@ materials = list(/datum/material/iron = 2000, /datum/material/bluespace = 500) category = list("Bluespace Designs") departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/bluespace_pipe + name = "Bluespace Pipe" + desc = "A pipe that teleports gases." + id = "bluespace_pipe" + build_type = PROTOLATHE + materials = list(/datum/material/gold = 1000, /datum/material/diamond = 750, /datum/material/uranium = 250, /datum/material/bluespace = 2000) + build_path = /obj/item/pipe/bluespace + category = list("Bluespace Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/techweb/nodes/bluespace_nodes.dm b/code/modules/research/techweb/nodes/bluespace_nodes.dm index 6c782456a8..90b69eb28d 100644 --- a/code/modules/research/techweb/nodes/bluespace_nodes.dm +++ b/code/modules/research/techweb/nodes/bluespace_nodes.dm @@ -61,7 +61,7 @@ display_name = "Bluespace Travel" description = "Application of Bluespace for static teleportation technology." prereq_ids = list("adv_power", "adv_bluespace") - design_ids = list("tele_station", "tele_hub", "quantumpad", "quantum_keycard", "launchpad", "launchpad_console", "teleconsole", "roastingstick") + design_ids = list("tele_station", "tele_hub", "quantumpad", "quantum_keycard", "launchpad", "launchpad_console", "teleconsole", "roastingstick", "bluespace_pipe") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) /datum/techweb_node/unregulated_bluespace diff --git a/icons/obj/atmospherics/pipes/bluespace.dmi b/icons/obj/atmospherics/pipes/bluespace.dmi new file mode 100644 index 0000000000..866e6f9b84 Binary files /dev/null and b/icons/obj/atmospherics/pipes/bluespace.dmi differ