diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 5d47b855257..e6dc792d33a 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -21,13 +21,11 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/var/initialize_directions = 0 -/obj/machinery/atmospherics/var/pipe_color - +/obj/machinery/atmospherics/var/pipe_color/ +/* /obj/machinery/atmospherics/process() - if(gc_destroyed) //comments on /vg/ imply that GC'd pipes still process - return PROCESS_KILL - build_network() - + //build_network() +*/ /obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) // Check to see if should be added to network. Add self if so and adjust variables appropriately. // Note don't forget to have neighbors look as well! @@ -89,3 +87,6 @@ Pipelines + Other Objects -> Pipe network qdel(src) else return ..() + +/obj/machinery/atmospherics/proc/nullifyPipenetwork() + return \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 923bb5ea0c2..27c9085e6ac 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -128,3 +128,7 @@ node2 = null return null + +/obj/machinery/atmospherics/binary/nullifyPipenetwork() + network1 = null + network2 = null \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index deb86fb9f8e..4976ebb5feb 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -160,3 +160,8 @@ node3 = null return null + +/obj/machinery/atmospherics/trinary/nullifyPipenetwork() + network1 = null + network2 = null + network3 = null \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 07465402083..3efd0b1d2a6 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -49,7 +49,7 @@ if(!infiniteloop) target.initialize(1) break - build_network() + //build_network() update_icon() @@ -97,3 +97,6 @@ del(network) return null + +/obj/machinery/atmospherics/unary/nullifyPipenetwork() + network = null \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 47b9b940489..b553d9578d6 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -11,7 +11,7 @@ can_unwrench = 1 var/open = 0 - var/openDuringInit = 0 + var/openDuringInit //useless, must remove var/obj/machinery/atmospherics/node1 var/obj/machinery/atmospherics/node2 @@ -178,12 +178,7 @@ obj/machinery/atmospherics/valve/attack_hand(mob/user as mob) node2 = target break - build_network() - - if(openDuringInit) - close() - open() - openDuringInit = 0 + //build_network() /* var/connect_directions @@ -309,3 +304,7 @@ obj/machinery/atmospherics/valve/attack_hand(mob/user as mob) close() else open() + +/obj/machinery/atmospherics/valve/nullifyPipenetwork() + network_node1 = null + network_node2 = null \ No newline at end of file diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index 7956edb5a34..4a4b9b5191d 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -12,7 +12,14 @@ var/global/list/datum/pipe_network/pipe_networks = list() /datum/pipe_network/New() air_transient = new() + ..() +/datum/pipe_network/Destroy() + pipe_networks -= src + for(var/datum/pipeline/P in line_members) + P.network = null + for(var/obj/machinery/atmospherics/A in normal_members) + A.nullifyPipenetwork() ..() /datum/pipe_network/proc/process() @@ -30,7 +37,7 @@ var/global/list/datum/pipe_network/pipe_networks = list() //Notes: Assuming that members will add themselves to appropriate roster in network_expand() if(!start_normal) - del(src) + qdel(src) start_normal.network_expand(src, reference) @@ -39,7 +46,7 @@ var/global/list/datum/pipe_network/pipe_networks = list() if((normal_members.len>0)||(line_members.len>0)) pipe_networks += src else - del(src) + qdel(src) /datum/pipe_network/proc/merge(datum/pipe_network/giver) if(giver==src) return 0 @@ -56,8 +63,6 @@ var/global/list/datum/pipe_network/pipe_networks = list() for(var/datum/pipeline/line_member in giver.line_members) line_member.network = src - del(giver) - update_network_gases() return 1 diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 1d9e9e2d21a..bff793b1c0d 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -8,16 +8,6 @@ var/alert_pressure = 0 -/datum/pipeline/Del() - if(network) - del(network) - - if(air && air.volume) - temporarily_store_air() - del(air) - - ..() - /datum/pipeline/proc/process()//This use to be called called from the pipe networks //Check to see if pressure is within acceptable limits @@ -51,9 +41,10 @@ corresponding.moles = trace_gas.moles*member.volume/air.volume +var/pipenetwarnings = 10 + /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base) air = new - var/list/possible_expansions = list(base) members = list(base) edges = list() @@ -67,7 +58,6 @@ base.air_temporary = null else air = new - while(possible_expansions.len>0) for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions) @@ -77,6 +67,13 @@ if(result.len>0) for(var/obj/machinery/atmospherics/pipe/item in result) if(!members.Find(item)) + + if(item.parent) + if(pipenetwarnings > 0) + error("[item.type] added to a pipenet while still having one. ([item.x], [item.y], [item.z])") + pipenetwarnings -= 1 + if(pipenetwarnings == 0) + error("further messages about pipenets will be supressed") members += item possible_expansions += item @@ -97,6 +94,57 @@ air.volume = volume +/datum/pipeline/proc/addMember(obj/machinery/atmospherics/pipe/P) + P.parent = src + var/list/adjacent = P.pipeline_expansion() + var/list/oldedges = list() + for(var/obj/machinery/atmospherics/pipe/I in adjacent) + oldedges += I + if(I.parent == src) + continue + var/datum/pipeline/E = I.parent + if(E.members.len > members.len) + members.Add(E.members) + for(var/obj/machinery/atmospherics/pipe/S in E.members) + S.parent = src + edges.Add(E.edges) + air.merge(E.air) + adjacent -= I + if(adjacent.len) + edges |= P + members |= P + if(oldedges.len) + for(var/obj/machinery/atmospherics/pipe/O in oldedges) + var/list/Oedges = O.pipeline_expansion() + for(var/obj/machinery/atmospherics/pipe/Oedgepipes in Oedges) + Oedges -= Oedgepipes + if(Oedges.len) + edges |= O + else + edges -= O + +/datum/pipeline/proc/removeLastMember(obj/machinery/atmospherics/pipe/P) + if(members.len == 1 && members.Find(P)) + qdel() + if(P.air_temporary) + var/turf/T = P.loc + T.assume_air(P.air_temporary) + +/obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/pipe/P) + return + +/obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/pipe/P) + parent.addMember(P) + +/datum/pipeline/Destroy() + if(network) + qdel(network) + if(air && air.volume) + temporarily_store_air() + for(var/obj/machinery/atmospherics/pipe/P in members) + P.parent = null + ..() + /datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) if(new_network.line_members.Find(src)) diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm index c1cd3304c8e..03a892e7a37 100644 --- a/code/ATMOSPHERICS/he_pipes.dm +++ b/code/ATMOSPHERICS/he_pipes.dm @@ -4,58 +4,42 @@ icon_state = "intact" level = 2 var/initialize_directions_he - minimum_temperature_difference = 20 thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT -// BubbleWrap /obj/machinery/atmospherics/pipe/simple/heat_exchanging/New() ..() initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe -// BubbleWrap END /obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize() normalize_dir() - var/node1_dir - var/node2_dir - - for(var/direction in cardinal) - if(direction&initialize_directions_he) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction - - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) - if(target.initialize_directions_he & get_dir(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break + var/N = 2 + for(var/D in cardinal) + if(D & initialize_directions_he) + N-- + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src, D)) + if(target.initialize_directions_he & get_dir(target,src)) + if(!node1 && N == 1) + node1 = target + break + if(!node2 && N == 0) + node2 = target + break update_icon() - return - /obj/machinery/atmospherics/pipe/simple/heat_exchanging/process() - if(!parent) - ..() - else - var/environment_temperature = 0 - if(istype(loc, /turf/simulated/)) - if(loc:blocks_air) - environment_temperature = loc:temperature - else - var/datum/gas_mixture/environment = loc.return_air() - environment_temperature = environment.temperature - else + var/environment_temperature = 0 + if(istype(loc, /turf/simulated)) + if(loc:blocks_air) environment_temperature = loc:temperature - var/datum/gas_mixture/pipe_air = return_air() - if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) - parent.temperature_interact(loc, volume, thermal_conductivity) - - + else + var/datum/gas_mixture/environment = loc.return_air() + environment_temperature = environment.temperature + else + environment_temperature = loc:temperature + var/datum/gas_mixture/pipe_air = return_air() + if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) + parent.temperature_interact(loc, volume, thermal_conductivity) /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction icon = 'icons/obj/pipes/junction.dmi' @@ -64,23 +48,21 @@ minimum_temperature_difference = 300 thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT -// BubbleWrap /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/New() - .. () - switch ( dir ) - if ( SOUTH ) + ..() + switch(dir) + if(SOUTH) initialize_directions = NORTH initialize_directions_he = SOUTH - if ( NORTH ) + if(NORTH) initialize_directions = SOUTH initialize_directions_he = NORTH - if ( EAST ) + if(EAST) initialize_directions = WEST initialize_directions_he = EAST - if ( WEST ) + if(WEST) initialize_directions = EAST initialize_directions_he = WEST -// BubbleWrap END /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/update_icon() if(node1&&node2) @@ -89,8 +71,6 @@ var/have_node1 = node1?1:0 var/have_node2 = node2?1:0 icon_state = "exposed[have_node1][have_node2]" - if(!node1&&!node2) - qdel(src) /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/initialize() for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) @@ -101,6 +81,5 @@ if(target.initialize_directions_he & get_dir(target,src)) node2 = target break - update_icon() return diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 53858c331f2..571f7bda15a 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -1,16 +1,11 @@ /obj/machinery/atmospherics/pipe - var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke var/datum/pipeline/parent - var/volume = 0 force = 20 - layer = 2.4 //under wires with their 2.44 use_power = 0 - can_unwrench = 1 - var/alert_pressure = 80*ONE_ATMOSPHERE //minimum pressure before check_pressure(...) should be called @@ -20,68 +15,57 @@ /obj/machinery/atmospherics/pipe/proc/check_pressure(pressure) //Return 1 if parent should continue checking other pipes //Return null if parent should stop checking other pipes. Recall: del(src) will by default return null - return 1 /obj/machinery/atmospherics/pipe/return_air() if(!parent) parent = new /datum/pipeline() parent.build_pipeline(src) - return parent.air /obj/machinery/atmospherics/pipe/build_network() if(!parent) parent = new /datum/pipeline() parent.build_pipeline(src) - return parent.return_network() /obj/machinery/atmospherics/pipe/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) if(!parent) parent = new /datum/pipeline() parent.build_pipeline(src) - return parent.network_expand(new_network, reference) /obj/machinery/atmospherics/pipe/return_network(obj/machinery/atmospherics/reference) if(!parent) parent = new /datum/pipeline() parent.build_pipeline(src) - return parent.return_network(reference) /obj/machinery/atmospherics/pipe/Destroy() del(parent) - if(air_temporary) - loc.assume_air(air_temporary) - del(air_temporary) - ..() +/obj/machinery/atmospherics/pipe/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/device/analyzer)) + atmosanalyzer_scan(parent.air, user) + else + return ..() + /obj/machinery/atmospherics/pipe/simple icon = 'icons/obj/pipes.dmi' icon_state = "intact-f" - name = "pipe" desc = "A one meter section of regular pipe" - volume = 70 - dir = SOUTH initialize_directions = SOUTH|NORTH - var/obj/machinery/atmospherics/node1 var/obj/machinery/atmospherics/node2 - var/minimum_temperature_difference = 300 var/thermal_conductivity = 0 //WALL_HEAT_TRANSFER_COEFFICIENT No - var/maximum_pressure = 70*ONE_ATMOSPHERE var/fatigue_pressure = 55*ONE_ATMOSPHERE alert_pressure = 55*ONE_ATMOSPHERE - - level = 1 /obj/machinery/atmospherics/pipe/simple/New() @@ -100,65 +84,57 @@ if(SOUTHWEST) initialize_directions = SOUTH|WEST - -/obj/machinery/atmospherics/pipe/simple/hide(var/i) - if(level == 1 && istype(loc, /turf/simulated)) - invisibility = i ? 101 : 0 +/obj/machinery/atmospherics/pipe/simple/initialize() + normalize_dir() + var/N = 2 + for(var/D in cardinal) + if(D & initialize_directions) + N-- + for(var/obj/machinery/atmospherics/target in get_step(src, D)) + if(target.initialize_directions & get_dir(target,src)) + if(!node1 && N == 1) + node1 = target + break + if(!node2 && N == 0) + node2 = target + break + var/turf/T = loc // hide if turf is not intact + hide(T.intact) update_icon() -/obj/machinery/atmospherics/pipe/simple/process() - if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle - ..() - else - . = PROCESS_KILL +/obj/machinery/atmospherics/pipe/simple/Destroy() + if(node1) + var/obj/machinery/atmospherics/A = node1 + node1.disconnect(src) + A.build_network() + if(node2) + var/obj/machinery/atmospherics/A = node2 + node2.disconnect(src) + A.build_network() + if(parent) + parent.removeLastMember(src) + ..() - /*if(!node1) - parent.mingle_with_turf(loc, volume) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - - else if(!node2) - parent.mingle_with_turf(loc, volume) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 - - - else if(parent) - var/environment_temperature = 0 - - if(istype(loc, /turf/simulated/)) - if(loc:blocks_air) - environment_temperature = loc:temperature - else - var/datum/gas_mixture/environment = loc.return_air() - environment_temperature = environment.temperature - - else - environment_temperature = loc:temperature - - var/datum/gas_mixture/pipe_air = return_air() - - if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference) - parent.temperature_interact(loc, volume, thermal_conductivity) - */ //Screw you heat lag +/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + qdel(parent) + node1 = null + if(reference == node2) + if(istype(node2, /obj/machinery/atmospherics/pipe)) + qdel(parent) + node2 = null + update_icon() /obj/machinery/atmospherics/pipe/simple/check_pressure(pressure) var/datum/gas_mixture/environment = loc.return_air() - var/pressure_difference = pressure - environment.return_pressure() - if(pressure_difference > maximum_pressure) burst() - else if(pressure_difference > fatigue_pressure) //TODO: leak to turf, doing pfshhhhh if(prob(5)) burst() - else return 1 /obj/machinery/atmospherics/pipe/simple/proc/burst() @@ -175,17 +151,6 @@ else if(dir==12) dir = 4 -/obj/machinery/atmospherics/pipe/simple/Destroy() - if(node1) - node1.disconnect(src) - if(node2) - node2.disconnect(src) - - ..() - -/obj/machinery/atmospherics/pipe/simple/pipeline_expansion() - return list(node1, node2) - /obj/machinery/atmospherics/pipe/simple/update_icon() if(node1&&node2) var/C = "" @@ -197,62 +162,140 @@ if ("yellow") C = "-y" if ("purple") C = "-p" icon_state = "intact[C][invisibility ? "-f" : "" ]" - - //var/node1_direction = get_dir(src, node1) - //var/node2_direction = get_dir(src, node2) - - //dir = node1_direction|node2_direction - else - if(!node1&&!node2) - qdel(src) //TODO: silent deleting looks weird var/have_node1 = node1?1:0 var/have_node2 = node2?1:0 icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" +/obj/machinery/atmospherics/pipe/simple/hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() -/obj/machinery/atmospherics/pipe/simple/initialize() - normalize_dir() - var/node1_dir - var/node2_dir +/obj/machinery/atmospherics/pipe/simple/pipeline_expansion() + return list(node1, node2) - for(var/direction in cardinal) - if(direction&initialize_directions) - if (!node1_dir) - node1_dir = direction - else if (!node2_dir) - node2_dir = direction +/obj/machinery/atmospherics/pipe/simple/insulated + icon = 'icons/obj/atmospherics/red_pipe.dmi' + icon_state = "intact" + minimum_temperature_difference = 10000 + thermal_conductivity = 0 + maximum_pressure = 1000*ONE_ATMOSPHERE + fatigue_pressure = 900*ONE_ATMOSPHERE + alert_pressure = 900*ONE_ATMOSPHERE + level = 2 - for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - break +/obj/machinery/atmospherics/pipe/manifold + icon = 'icons/obj/atmospherics/pipe_manifold.dmi' + icon_state = "manifold-f" + name = "pipe manifold" + desc = "A manifold composed of regular pipes" + volume = 105 + dir = SOUTH + initialize_directions = EAST|NORTH|WEST + var/obj/machinery/atmospherics/node1 + var/obj/machinery/atmospherics/node2 + var/obj/machinery/atmospherics/node3 + level = 1 + layer = 2.4 //under wires with their 2.44 +/obj/machinery/atmospherics/pipe/manifold/New() + switch(dir) + if(NORTH) + initialize_directions = EAST|SOUTH|WEST + if(SOUTH) + initialize_directions = WEST|NORTH|EAST + if(EAST) + initialize_directions = SOUTH|WEST|NORTH + if(WEST) + initialize_directions = NORTH|EAST|SOUTH + ..() +/obj/machinery/atmospherics/pipe/manifold/initialize() + for(var/D in cardinal) + if(D == dir) + continue + for(var/obj/machinery/atmospherics/target in get_step(src, D)) + if(target.initialize_directions & get_dir(target,src)) + if(turn(dir, 90) == D) + node1 = target + if(turn(dir, 270) == D) + node2 = target + if(turn(dir, 180) == D) + node3 = target + break var/turf/T = src.loc // hide if turf is not intact hide(T.intact) update_icon() - //update_icon() -/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) +/obj/machinery/atmospherics/pipe/manifold/Destroy() + if(node1) + var/obj/machinery/atmospherics/A = node1 + node1.disconnect(src) + A.build_network() + if(node2) + var/obj/machinery/atmospherics/A = node2 + node2.disconnect(src) + A.build_network() + if(node3) + var/obj/machinery/atmospherics/A = node3 + node3.disconnect(src) + A.build_network() + if(parent) + parent.removeLastMember(src) + ..() + +/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node1 = null - if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) + qdel(parent) node2 = null + if(reference == node3) + if(istype(node3, /obj/machinery/atmospherics/pipe)) + qdel(parent) + node3 = null + update_icon() + ..() +/obj/machinery/atmospherics/pipe/manifold/update_icon() + if(node1&&node2&&node3) + var/C = "" + switch(pipe_color) + if ("red") C = "-r" + if ("blue") C = "-b" + if ("cyan") C = "-c" + if ("green") C = "-g" + if ("yellow") C = "-y" + if ("purple") C = "-p" + icon_state = "manifold[C][invisibility ? "-f" : ""]" + else + var/connected = 0 + var/unconnected = 0 + var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) + if(node1) + connected |= get_dir(src, node1) + if(node2) + connected |= get_dir(src, node2) + if(node3) + connected |= get_dir(src, node3) + unconnected = (~connected)&(connect_directions) + icon_state = "manifold_[connected]_[unconnected]" + +/obj/machinery/atmospherics/pipe/manifold/hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 update_icon() - return null +/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion() + return list(node1, node2, node3) + + +//coloured pipes /obj/machinery/atmospherics/pipe/simple/scrubbers name="Scrubbers pipe" pipe_color="red" @@ -319,434 +362,7 @@ icon_state = "intact-y-f" - -/obj/machinery/atmospherics/pipe/simple/insulated - icon = 'icons/obj/atmospherics/red_pipe.dmi' - icon_state = "intact" - - minimum_temperature_difference = 10000 - thermal_conductivity = 0 - maximum_pressure = 1000*ONE_ATMOSPHERE - fatigue_pressure = 900*ONE_ATMOSPHERE - alert_pressure = 900*ONE_ATMOSPHERE - - level = 2 - - -/obj/machinery/atmospherics/pipe/tank - icon = 'icons/obj/atmospherics/pipe_tank.dmi' - icon_state = "intact" - - name = "pressure tank" - desc = "A large vessel containing pressurized gas." - - volume = 10000 //in liters, 1 meters by 1 meters by 2 meters - - dir = SOUTH - initialize_directions = SOUTH - density = 1 - - can_unwrench = 0 - - var/obj/machinery/atmospherics/node1 - -/obj/machinery/atmospherics/pipe/tank/New() - initialize_directions = dir - ..() - -/obj/machinery/atmospherics/pipe/tank/process() - if(!parent) - ..() - else - . = PROCESS_KILL -/* if(!node1) - parent.mingle_with_turf(loc, 200) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 -*/ -/obj/machinery/atmospherics/pipe/tank/carbon_dioxide - name = "pressure tank (Carbon Dioxide)" - -/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - -/obj/machinery/atmospherics/pipe/tank/toxins - icon = 'icons/obj/atmospherics/orange_pipe_tank.dmi' - name = "pressure tank (Plasma)" - -/obj/machinery/atmospherics/pipe/tank/toxins/New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - -/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b - icon = 'icons/obj/atmospherics/red_orange_pipe_tank.dmi' - name = "pressure tank (Oxygen + Plasma)" - -/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b/New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T0C - - var/datum/gas/oxygen_agent_b/trace_gas = new - trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - air_temporary.trace_gases += trace_gas - - ..() - -/obj/machinery/atmospherics/pipe/tank/oxygen - icon = 'icons/obj/atmospherics/blue_pipe_tank.dmi' - name = "pressure tank (Oxygen)" - -/obj/machinery/atmospherics/pipe/tank/oxygen/New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - -/obj/machinery/atmospherics/pipe/tank/nitrogen - icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' - name = "pressure tank (Nitrogen)" - -/obj/machinery/atmospherics/pipe/tank/nitrogen/New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - -/obj/machinery/atmospherics/pipe/tank/air - icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' - name = "pressure tank (Air)" - -/obj/machinery/atmospherics/pipe/tank/air/New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - -/obj/machinery/atmospherics/pipe/tank/Destroy() - if(node1) - node1.disconnect(src) - - ..() - -/obj/machinery/atmospherics/pipe/tank/pipeline_expansion() - return list(node1) - -/obj/machinery/atmospherics/pipe/tank/update_icon() - if(node1) - icon_state = "intact" - - dir = get_dir(src, node1) - - else - icon_state = "exposed" - -/obj/machinery/atmospherics/pipe/tank/initialize() - - var/connect_direction = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - - update_icon() - -/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - update_icon() - - return null - -/obj/machinery/atmospherics/pipe/tank/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (istype(W, /obj/item/device/analyzer) && get_dist(user, src) <= 1) - atmosanalyzer_scan(parent.air, user) - -/obj/machinery/atmospherics/pipe/vent - icon = 'icons/obj/atmospherics/pipe_vent.dmi' - icon_state = "intact" - - name = "vent" - desc = "A large air vent" - - level = 1 - - volume = 250 - - dir = SOUTH - initialize_directions = SOUTH - - can_unwrench = 0 - - var/build_killswitch = 1 - - var/obj/machinery/atmospherics/node1 - -/obj/machinery/atmospherics/pipe/vent/New() - initialize_directions = dir - ..() - -/obj/machinery/atmospherics/pipe/vent/process() - if(!parent) - if(build_killswitch <= 0) - . = PROCESS_KILL - else - build_killswitch-- - ..() - return - else - parent.mingle_with_turf(loc, 250) -/* - if(!node1) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 -*/ -/obj/machinery/atmospherics/pipe/vent/Destroy() - if(node1) - node1.disconnect(src) - - ..() - -/obj/machinery/atmospherics/pipe/vent/pipeline_expansion() - return list(node1) - -/obj/machinery/atmospherics/pipe/vent/update_icon() - if(node1) - icon_state = "intact" - - dir = get_dir(src, node1) - - else - icon_state = "exposed" - -/obj/machinery/atmospherics/pipe/vent/initialize() - var/connect_direction = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - - update_icon() - -/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - update_icon() - - return null - -/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes. - if(node1) - icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" - dir = get_dir(src, node1) - else - icon_state = "exposed" - -/obj/machinery/atmospherics/pipe/manifold - icon = 'icons/obj/atmospherics/pipe_manifold.dmi' - icon_state = "manifold-f" - - name = "pipe manifold" - desc = "A manifold composed of regular pipes" - - volume = 105 - - dir = SOUTH - initialize_directions = EAST|NORTH|WEST - - var/obj/machinery/atmospherics/node1 - var/obj/machinery/atmospherics/node2 - var/obj/machinery/atmospherics/node3 - - level = 1 - layer = 2.4 //under wires with their 2.44 - -/obj/machinery/atmospherics/pipe/manifold/New() - switch(dir) - if(NORTH) - initialize_directions = EAST|SOUTH|WEST - if(SOUTH) - initialize_directions = WEST|NORTH|EAST - if(EAST) - initialize_directions = SOUTH|WEST|NORTH - if(WEST) - initialize_directions = NORTH|EAST|SOUTH - - ..() - - - -/obj/machinery/atmospherics/pipe/manifold/hide(var/i) - if(level == 1 && istype(loc, /turf/simulated)) - invisibility = i ? 101 : 0 - update_icon() - -/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion() - return list(node1, node2, node3) - -/obj/machinery/atmospherics/pipe/manifold/process() - if(!parent) - ..() - else - . = PROCESS_KILL -/* - if(!node1) - parent.mingle_with_turf(loc, 70) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if(!node2) - parent.mingle_with_turf(loc, 70) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if(!node3) - parent.mingle_with_turf(loc, 70) - if(!nodealert) - //world << "Missing node from [src] at [src.x],[src.y],[src.z]" - nodealert = 1 - else if (nodealert) - nodealert = 0 -*/ -/obj/machinery/atmospherics/pipe/manifold/Destroy() - if(node1) - node1.disconnect(src) - if(node2) - node2.disconnect(src) - if(node3) - node3.disconnect(src) - - ..() - -/obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) - if(reference == node1) - if(istype(node1, /obj/machinery/atmospherics/pipe)) - del(parent) - node1 = null - - if(reference == node2) - if(istype(node2, /obj/machinery/atmospherics/pipe)) - del(parent) - node2 = null - - if(reference == node3) - if(istype(node3, /obj/machinery/atmospherics/pipe)) - del(parent) - node3 = null - - update_icon() - - ..() - -/obj/machinery/atmospherics/pipe/manifold/update_icon() - if(node1&&node2&&node3) - var/C = "" - switch(pipe_color) - if ("red") C = "-r" - if ("blue") C = "-b" - if ("cyan") C = "-c" - if ("green") C = "-g" - if ("yellow") C = "-y" - if ("purple") C = "-p" - icon_state = "manifold[C][invisibility ? "-f" : ""]" - - else - var/connected = 0 - var/unconnected = 0 - var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) - - if(node1) - connected |= get_dir(src, node1) - if(node2) - connected |= get_dir(src, node2) - if(node3) - connected |= get_dir(src, node3) - - unconnected = (~connected)&(connect_directions) - - icon_state = "manifold_[connected]_[unconnected]" - - if(!connected) - qdel(src) - - return - -/obj/machinery/atmospherics/pipe/manifold/initialize() - var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir) - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break - - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node2 = target - connect_directions &= ~direction - break - if (node2) - break - - - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/target in get_step(src,direction)) - if(target.initialize_directions & get_dir(target,src)) - node3 = target - connect_directions &= ~direction - break - if (node3) - break - - var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) - //update_icon() - update_icon() - +//coloured manifolds /obj/machinery/atmospherics/pipe/manifold/scrubbers name="Scrubbers pipe" pipe_color="red" @@ -812,8 +428,202 @@ level = 1 icon_state = "manifold-y-f" -obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (istype(W, /obj/item/device/analyzer) && get_dist(user, src) <= 1) - atmosanalyzer_scan(parent.air, user) +/obj/machinery/atmospherics/pipe/vent + icon = 'icons/obj/atmospherics/pipe_vent.dmi' + icon_state = "intact" + + name = "vent" + desc = "A large air vent" + + level = 1 + + volume = 250 + + dir = SOUTH + initialize_directions = SOUTH + + can_unwrench = 0 + + var/build_killswitch = 1 + + var/obj/machinery/atmospherics/node1 + +/obj/machinery/atmospherics/pipe/vent/New() + initialize_directions = dir + ..() + +/obj/machinery/atmospherics/pipe/vent/process() + if(!parent) + if(build_killswitch <= 0) + . = PROCESS_KILL + else + build_killswitch-- + ..() + return else - return ..() + parent.mingle_with_turf(loc, 250) +/* + if(!node1) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 +*/ +/obj/machinery/atmospherics/pipe/vent/Destroy() + if(node1) + node1.disconnect(src) + ..() + +/obj/machinery/atmospherics/pipe/vent/pipeline_expansion() + return list(node1) + +/obj/machinery/atmospherics/pipe/vent/update_icon() + if(node1) + icon_state = "intact" + + dir = get_dir(src, node1) + + else + icon_state = "exposed" + +/obj/machinery/atmospherics/pipe/vent/initialize() + var/connect_direction = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + update_icon() + +/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null + + update_icon() + + return null + +/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes. + if(node1) + icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact" + dir = get_dir(src, node1) + else + icon_state = "exposed" + +/obj/machinery/atmospherics/pipe/tank + icon = 'icons/obj/atmospherics/pipe_tank.dmi' + icon_state = "intact" + name = "pressure tank" + desc = "A large vessel containing pressurized gas." + volume = 10000 //in liters, 1 meters by 1 meters by 2 meters + dir = SOUTH + initialize_directions = SOUTH + density = 1 + can_unwrench = 0 + var/obj/machinery/atmospherics/node1 + +/obj/machinery/atmospherics/pipe/tank/New() + initialize_directions = dir + ..() + +/obj/machinery/atmospherics/pipe/tank/carbon_dioxide + name = "pressure tank (Carbon Dioxide)" + +/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + ..() + +/obj/machinery/atmospherics/pipe/tank/toxins + icon = 'icons/obj/atmospherics/orange_pipe_tank.dmi' + name = "pressure tank (Plasma)" + +/obj/machinery/atmospherics/pipe/tank/toxins/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + ..() + +/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b + icon = 'icons/obj/atmospherics/red_orange_pipe_tank.dmi' + name = "pressure tank (Oxygen + Plasma)" + +/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T0C + var/datum/gas/oxygen_agent_b/trace_gas = new + trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + air_temporary.trace_gases += trace_gas + ..() + +/obj/machinery/atmospherics/pipe/tank/oxygen + icon = 'icons/obj/atmospherics/blue_pipe_tank.dmi' + name = "pressure tank (Oxygen)" + +/obj/machinery/atmospherics/pipe/tank/oxygen/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + ..() + +/obj/machinery/atmospherics/pipe/tank/nitrogen + icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' + name = "pressure tank (Nitrogen)" + +/obj/machinery/atmospherics/pipe/tank/nitrogen/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + ..() + +/obj/machinery/atmospherics/pipe/tank/air + icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' + name = "pressure tank (Air)" + +/obj/machinery/atmospherics/pipe/tank/air/New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T20C + air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + ..() + +/obj/machinery/atmospherics/pipe/tank/Destroy() + if(node1) + node1.disconnect(src) + ..() + +/obj/machinery/atmospherics/pipe/tank/pipeline_expansion() + return list(node1) + +/obj/machinery/atmospherics/pipe/tank/update_icon() + if(node1) + icon_state = "intact" + dir = get_dir(src, node1) + else + icon_state = "exposed" + +/obj/machinery/atmospherics/pipe/tank/initialize() + var/connect_direction = dir + for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + update_icon() + +/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null + update_icon() \ No newline at end of file diff --git a/code/controllers/garbage.dm b/code/controllers/garbage.dm index 322bc086d89..501ea8a2d92 100644 --- a/code/controllers/garbage.dm +++ b/code/controllers/garbage.dm @@ -70,7 +70,8 @@ var/datum/controller/garbage_collector/garbage = new() // This should be overridden to remove all references pointing to the object being destroyed. // Return true if the the GC controller should allow the object to continue existing. (Useful if pooling objects.) /datum/proc/Destroy() - del(src) + //del(src) + return /datum/var/gc_destroyed //Time when this object was destroyed. diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 8d41384915c..ab94b08d5e7 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -254,8 +254,6 @@ Buildable meters return 1 // no conflicts found - var/pipefailtext = "There's nothing to connect this pipe section to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" - switch(pipe_type) if(PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT) var/obj/machinery/atmospherics/pipe/simple/P = new( src.loc ) @@ -264,16 +262,13 @@ Buildable meters var/turf/T = P.loc P.level = T.intact ? 2 : 1 P.initialize() - if (!P) - usr << pipefailtext - return 1 - P.build_network() if (P.node1) P.node1.initialize() - P.node1.build_network() + P.node1.addMember(P) if (P.node2) P.node2.initialize() - P.node2.build_network() + P.node2.addMember(P) + P.build_network() if(PIPE_HE_STRAIGHT, PIPE_HE_BENT) var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/P = new ( src.loc ) @@ -283,16 +278,13 @@ Buildable meters //var/turf/T = P.loc //P.level = T.intact ? 2 : 1 P.initialize() - if (!P) - usr << pipefailtext - return 1 - P.build_network() if (P.node1) P.node1.initialize() - P.node1.build_network() + P.node1.addMember(P) if (P.node2) P.node2.initialize() - P.node2.build_network() + P.node2.addMember(P) + P.build_network() if(PIPE_CONNECTOR) // connector var/obj/machinery/atmospherics/portables_connector/C = new( src.loc ) @@ -310,26 +302,22 @@ Buildable meters if(PIPE_MANIFOLD) //manifold - var/obj/machinery/atmospherics/pipe/manifold/M = new( src.loc ) + var/obj/machinery/atmospherics/pipe/manifold/M = new(loc) M.dir = dir M.initialize_directions = pipe_dir - //M.New() var/turf/T = M.loc M.level = T.intact ? 2 : 1 M.initialize() - if (!M) - usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" - return 1 - M.build_network() if (M.node1) M.node1.initialize() - M.node1.build_network() + M.node1.addMember(M) if (M.node2) M.node2.initialize() - M.node2.build_network() + M.node2.addMember(M) if (M.node3) M.node3.initialize() - M.node3.build_network() + M.node3.addMember(M) + M.build_network() if(PIPE_JUNCTION) var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/P = new ( src.loc ) @@ -339,16 +327,13 @@ Buildable meters //var/turf/T = P.loc //P.level = T.intact ? 2 : 1 P.initialize() - if (!P) - usr << "There's nothing to connect this junction to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" - return 1 - P.build_network() if (P.node1) P.node1.initialize() - P.node1.build_network() + P.node1.addMember(P) if (P.node2) P.node2.initialize() - P.node2.build_network() + P.node2.addMember(P) + P.build_network() if(PIPE_UVENT) //unary vent var/obj/machinery/atmospherics/unary/vent_pump/V = new( src.loc ) @@ -479,16 +464,13 @@ Buildable meters var/turf/T = P.loc P.level = T.intact ? 2 : 1 P.initialize() - if (!P) - usr << pipefailtext - return 1 - P.build_network() if (P.node1) P.node1.initialize() - P.node1.build_network() + P.node1.addMember(P) if (P.node2) P.node2.initialize() - P.node2.build_network() + P.node2.addMember(P) + P.build_network() if(PIPE_PASSIVE_GATE) //passive gate var/obj/machinery/atmospherics/binary/passive_gate/P = new(src.loc) diff --git a/icons/obj/atmospherics/pipe_manifold.dmi b/icons/obj/atmospherics/pipe_manifold.dmi index a252c8ac8a8..f516eac7da9 100644 Binary files a/icons/obj/atmospherics/pipe_manifold.dmi and b/icons/obj/atmospherics/pipe_manifold.dmi differ diff --git a/icons/obj/atmospherics/red_pipe.dmi b/icons/obj/atmospherics/red_pipe.dmi index ff9d9e8a59a..a5a84439efe 100644 Binary files a/icons/obj/atmospherics/red_pipe.dmi and b/icons/obj/atmospherics/red_pipe.dmi differ diff --git a/icons/obj/pipes.dmi b/icons/obj/pipes.dmi index 59909fb6f54..25d15984b4c 100644 Binary files a/icons/obj/pipes.dmi and b/icons/obj/pipes.dmi differ diff --git a/icons/obj/pipes/heat.dmi b/icons/obj/pipes/heat.dmi index 6d1ed47e7ef..4b6f4b7b741 100644 Binary files a/icons/obj/pipes/heat.dmi and b/icons/obj/pipes/heat.dmi differ diff --git a/icons/obj/pipes/junction.dmi b/icons/obj/pipes/junction.dmi index 70286bde155..88d96929eaa 100644 Binary files a/icons/obj/pipes/junction.dmi and b/icons/obj/pipes/junction.dmi differ