diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 40a9f325b0..ef0f656781 100755 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -234,4 +234,45 @@ obj/machinery/atmospherics/trinary/filter/Topic(href, href_list) // -- TLE */ return +obj/machinery/atmospherics/trinary/filter/m_filter + icon = 'icons/obj/atmospherics/m_filter.dmi' + icon_state = "intact_off" + dir = SOUTH + initialize_directions = SOUTH|NORTH|EAST + +obj/machinery/atmospherics/trinary/filter/m_filter/New() + ..() + switch(dir) + if(NORTH) + initialize_directions = WEST|NORTH|SOUTH + if(SOUTH) + initialize_directions = SOUTH|EAST|NORTH + if(EAST) + initialize_directions = EAST|WEST|NORTH + if(WEST) + initialize_directions = WEST|SOUTH|EAST + +obj/machinery/atmospherics/trinary/filter/m_filter/initialize() + if(node1 && node2 && node3) return + + var/node1_connect = turn(dir, -180) + var/node2_connect = turn(dir, 90) + var/node3_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + update_icon() diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index bcff8e09cc..3b16042fca 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -160,3 +160,93 @@ obj/machinery/atmospherics/trinary/mixer src.update_icon() src.updateUsrDialog() return + +obj/machinery/atmospherics/trinary/mixer/t_mixer + icon = 'icons/obj/atmospherics/t_mixer.dmi' + icon_state = "intact_off" + + dir = SOUTH + initialize_directions = SOUTH|EAST|WEST + + //node 3 is the outlet, nodes 1 & 2 are intakes + +obj/machinery/atmospherics/trinary/mixer/t_mixer/New() + ..() + switch(dir) + if(NORTH) + initialize_directions = EAST|NORTH|WEST + if(SOUTH) + initialize_directions = SOUTH|WEST|EAST + if(EAST) + initialize_directions = EAST|NORTH|SOUTH + if(WEST) + initialize_directions = WEST|NORTH|SOUTH + +obj/machinery/atmospherics/trinary/mixer/t_mixer/initialize() + if(node1 && node2 && node3) return + + var/node1_connect = turn(dir, -90) + var/node2_connect = turn(dir, 90) + var/node3_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + update_icon() + +obj/machinery/atmospherics/trinary/mixer/m_mixer + icon = 'icons/obj/atmospherics/m_mixer.dmi' + icon_state = "intact_off" + + dir = SOUTH + initialize_directions = SOUTH|NORTH|EAST + + //node 3 is the outlet, nodes 1 & 2 are intakes + +obj/machinery/atmospherics/trinary/mixer/m_mixer/New() + ..() + switch(dir) + if(NORTH) + initialize_directions = WEST|NORTH|SOUTH + if(SOUTH) + initialize_directions = SOUTH|EAST|NORTH + if(EAST) + initialize_directions = EAST|WEST|NORTH + if(WEST) + initialize_directions = WEST|SOUTH|EAST + +obj/machinery/atmospherics/trinary/mixer/m_mixer/initialize() + if(node1 && node2 && node3) return + + var/node1_connect = turn(dir, -180) + var/node2_connect = turn(dir, 90) + var/node3_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + update_icon() \ No newline at end of file diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index d3e494b2d7..c7829494aa 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -27,6 +27,9 @@ Buildable meters #define PIPE_UP 21 #define PIPE_DOWN 22 ///// Z-Level stuff +#define PIPE_GAS_FILTER_M 23 +#define PIPE_GAS_MIXER_T 24 +#define PIPE_GAS_MIXER_M 25 /obj/item/pipe name = "pipe" @@ -71,6 +74,12 @@ Buildable meters src.pipe_type = PIPE_MVALVE else if(istype(make_from, /obj/machinery/atmospherics/binary/pump)) src.pipe_type = PIPE_PUMP + else if(istype(make_from, /obj/machinery/atmospherics/trinary/filter/m_filter)) + src.pipe_type = PIPE_GAS_FILTER_M + else if(istype(make_from, /obj/machinery/atmospherics/trinary/mixer/t_mixer)) + src.pipe_type = PIPE_GAS_MIXER_T + else if(istype(make_from, /obj/machinery/atmospherics/trinary/mixer/m_mixer)) + src.pipe_type = PIPE_GAS_MIXER_M else if(istype(make_from, /obj/machinery/atmospherics/trinary/filter)) src.pipe_type = PIPE_GAS_FILTER else if(istype(make_from, /obj/machinery/atmospherics/trinary/mixer)) @@ -132,6 +141,9 @@ Buildable meters "pipe up", \ "pipe down", \ ///// Z-Level stuff + "gas filter m", \ + "gas mixer t", \ + "gas mixer m", \ ) name = nlist[pipe_type+1] + " fitting" var/list/islist = list( \ @@ -160,6 +172,9 @@ Buildable meters "cap", \ "cap", \ ///// Z-Level stuff + "m_filter", \ + "t_mixer", \ + "m_mixer", \ ) icon_state = islist[pipe_type + 1] @@ -230,6 +245,10 @@ Buildable meters return flip|cw|acw if(PIPE_GAS_FILTER, PIPE_GAS_MIXER,PIPE_MTVALVE) return dir|flip|cw + if(PIPE_GAS_FILTER_M, PIPE_GAS_MIXER_M) + return dir|flip|acw + if(PIPE_GAS_MIXER_T) + return dir|cw|acw if(PIPE_CAP) return flip ///// Z-Level stuff @@ -490,7 +509,7 @@ Buildable meters P.node3.initialize() P.node3.build_network() - if(PIPE_GAS_MIXER) //gas filter + if(PIPE_GAS_MIXER) //gas mixer var/obj/machinery/atmospherics/trinary/mixer/P = new(src.loc) P.dir = dir P.initialize_directions = pipe_dir @@ -510,6 +529,66 @@ Buildable meters P.node3.initialize() P.node3.build_network() + if(PIPE_GAS_FILTER_M) //gas filter mirrored + var/obj/machinery/atmospherics/trinary/filter/m_filter/P = new(src.loc) + P.dir = dir + P.initialize_directions = pipe_dir + if (pipename) + P.name = pipename + var/turf/T = P.loc + P.level = T.intact ? 2 : 1 + P.initialize() + P.build_network() + if (P.node1) + P.node1.initialize() + P.node1.build_network() + if (P.node2) + P.node2.initialize() + P.node2.build_network() + if (P.node3) + P.node3.initialize() + P.node3.build_network() + + if(PIPE_GAS_MIXER_T) //gas mixer-t + var/obj/machinery/atmospherics/trinary/mixer/t_mixer/P = new(src.loc) + P.dir = dir + P.initialize_directions = pipe_dir + if (pipename) + P.name = pipename + var/turf/T = P.loc + P.level = T.intact ? 2 : 1 + P.initialize() + P.build_network() + if (P.node1) + P.node1.initialize() + P.node1.build_network() + if (P.node2) + P.node2.initialize() + P.node2.build_network() + if (P.node3) + P.node3.initialize() + P.node3.build_network() + + if(PIPE_GAS_MIXER_M) //gas mixer mirrored + var/obj/machinery/atmospherics/trinary/mixer/m_mixer/P = new(src.loc) + P.dir = dir + P.initialize_directions = pipe_dir + if (pipename) + P.name = pipename + var/turf/T = P.loc + P.level = T.intact ? 2 : 1 + P.initialize() + P.build_network() + if (P.node1) + P.node1.initialize() + P.node1.build_network() + if (P.node2) + P.node2.initialize() + P.node2.build_network() + if (P.node3) + P.node3.initialize() + P.node3.build_network() + if(PIPE_SCRUBBER) //scrubber var/obj/machinery/atmospherics/unary/vent_scrubber/S = new(src.loc) S.dir = dir @@ -709,4 +788,7 @@ Buildable meters #undef PIPE_VOLUME_PUMP #undef PIPE_OUTLET_INJECT #undef PIPE_MTVALVE +#undef PIPE_GAS_FILTER_M +#undef PIPE_GAS_MIXER_T +#undef PIPE_GAS_MIXER_M //#undef PIPE_MANIFOLD4W diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index bf6233f4d4..558f54118c 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -34,7 +34,10 @@ Scrubber
Meter
Gas Filter
+Gas Filter-Mirrored
Gas Mixer
+Gas Mixer-Mirrored
+Gas Mixer-T
Heat exchange:
Pipe
Bent Pipe
diff --git a/icons/obj/atmospherics/m_filter.dmi b/icons/obj/atmospherics/m_filter.dmi new file mode 100644 index 0000000000..70261633eb Binary files /dev/null and b/icons/obj/atmospherics/m_filter.dmi differ diff --git a/icons/obj/atmospherics/m_mixer.dmi b/icons/obj/atmospherics/m_mixer.dmi new file mode 100644 index 0000000000..81c6bbb5e1 Binary files /dev/null and b/icons/obj/atmospherics/m_mixer.dmi differ diff --git a/icons/obj/atmospherics/t_mixer.dmi b/icons/obj/atmospherics/t_mixer.dmi new file mode 100644 index 0000000000..1535a52ee3 Binary files /dev/null and b/icons/obj/atmospherics/t_mixer.dmi differ diff --git a/icons/obj/pipe-item.dmi b/icons/obj/pipe-item.dmi index 7aad691051..65a10a3055 100644 Binary files a/icons/obj/pipe-item.dmi and b/icons/obj/pipe-item.dmi differ