diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index c31f6f92b7..9d67602e5e 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -27,6 +27,8 @@ active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP var/last_power_draw = 0 + connect_types = list(1,2,3) //connects to regular, supply and scrubbers pipes + var/on = 0 var/pump_direction = 1 //0 = siphoning, 1 = releasing @@ -62,7 +64,7 @@ return overlays.Cut() - + var/vent_icon = "vent" var/turf/T = get_turf(src) @@ -71,7 +73,7 @@ if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) vent_icon += "h" - + if(!powered()) vent_icon += "off" else @@ -88,8 +90,14 @@ if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) return else - add_underlay(T, node1, turn(dir, -180)) - add_underlay(T, node2, dir) + if (node1) + add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type) + else + add_underlay(T, node1, turn(dir, -180)) + if (node2) + add_underlay(T, node2, dir, node2.icon_connect_type) + else + add_underlay(T, node2, dir) /obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i) update_icon() @@ -97,7 +105,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/process() ..() - + if(stat & (NOPOWER|BROKEN) || !on) update_use_power(0) //usually we get here because a player turned a pump off - definitely want to update. last_power_draw = 0 @@ -107,19 +115,19 @@ var/datum/gas_mixture/environment = loc.return_air() var/power_draw = -1 - + //Figure out the target pressure difference var/pressure_delta = get_pressure_delta(environment) if(pressure_delta > 0.5) - if(pump_direction) //internal -> external + if(pump_direction) //internal -> external if (node1 && (environment.temperature || air1.temperature)) var/output_volume = environment.volume * environment.group_multiplier var/air_temperature = environment.temperature? environment.temperature : air1.temperature var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - + power_draw = pump_gas(src, air1, environment, transfer_moles, active_power_usage) - + if(power_draw >= 0 && network1) network1.update = 1 else //external -> internal @@ -127,15 +135,15 @@ var/output_volume = air2.volume + (network2? network2.volume : 0) var/air_temperature = air2.temperature? air2.temperature : environment.temperature var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - + //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here - + power_draw = pump_gas(src, environment, air2, transfer_moles, active_power_usage) - + if(power_draw >= 0 && network2) network2.update = 1 - + if (power_draw < 0) last_power_draw = 0 last_flow_rate = 0 @@ -149,7 +157,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) var/pressure_delta = DEFAULT_PRESSURE_DELTA var/environment_pressure = environment.return_pressure() - + if(pump_direction) //internal -> external if(pressure_checks & PRESSURE_CHECK_EXTERNAL) pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here @@ -160,9 +168,9 @@ pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here if(pressure_checks & PRESSURE_CHECK_OUTPUT) pressure_delta = min(pressure_delta, output_pressure_max - air2.return_pressure()) //increasing the pressure here - + return pressure_delta - + //Radio remote control @@ -203,7 +211,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/examine() set src in oview(1) ..() - + if (get_dist(usr, src) <= 1) usr << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W"