diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 56f69ee14b..ef3066104a 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -120,7 +120,7 @@ power_draw = pump_gas(air1, environment, transfer_moles, active_power_usage) - if(network1) + if(power_draw >= 0 && network1) network1.update = 1 else //external -> internal if (node2 && (environment.temperature || air2.temperature)) @@ -133,7 +133,7 @@ power_draw = pump_gas(environment, air2, transfer_moles, active_power_usage) - if(network2) + if(power_draw >= 0 && network2) network2.update = 1 if (power_draw < 0) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index b4958022b2..9ce6f3b72d 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -74,7 +74,7 @@ Thus, the two variables affect pump operation are set in New(): var/power_draw = -1 var/pressure_delta = target_pressure - air2.return_pressure() - if(pressure_delta > 0.01 && (air1.temperature > 0 || air2.temperature > 0)) + if(pressure_delta > 0.01 && air1.temperature > 0) //Figure out how much gas to transfer to meet the target pressure. var/air_temperature = (air2.temperature > 0)? air2.temperature : air1.temperature var/output_volume = air2.volume + (network2? network2.volume : 0) @@ -83,12 +83,6 @@ Thus, the two variables affect pump operation are set in New(): var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) power_draw = pump_gas(air1, air2, transfer_moles, active_power_usage) - - if(network1) - network1.update = 1 - - if(network2) - network2.update = 1 if (power_draw < 0) //update_use_power(0) @@ -97,6 +91,12 @@ Thus, the two variables affect pump operation are set in New(): last_flow_rate = 0 else last_power_draw = handle_power_draw(power_draw) + + if(network1) + network1.update = 1 + + if(network2) + network2.update = 1 return 1 @@ -213,7 +213,7 @@ Thus, the two variables affect pump operation are set in New(): target_pressure = max_pressure_setting if ("set") var/new_pressure = input(usr,"Enter new output pressure (0-[max_pressure_setting]kPa)","Pressure control",src.target_pressure) as num - src.target_pressure = max(0, min(max_pressure_setting, new_pressure)) + src.target_pressure = between(0, new_pressure, max_pressure_setting) usr.set_machine(src) src.add_fingerprint(usr) diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index 8f4c334da2..7393f47c47 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -76,6 +76,13 @@ var/power_draw = -1 if (transfer_moles > MINUMUM_MOLES_TO_FILTER) power_draw = filter_gas_multi(filtering_outputs, input_air, output_air, transfer_moles, active_power_usage) + + if (power_draw < 0) + //update_use_power(0) + use_power = 0 //don't force update - easier on CPU + last_flow_rate = 0 + else + handle_power_draw(power_draw) if(input.network) input.network.update = 1 @@ -84,13 +91,6 @@ for(var/datum/omni_port/P in filters) if(P.network) P.network.update = 1 - - if (power_draw < 0) - //update_use_power(0) - use_power = 0 //don't force update - easier on CPU - last_flow_rate = 0 - else - handle_power_draw(power_draw) return 1 diff --git a/code/ATMOSPHERICS/components/omni_devices/mixer.dm b/code/ATMOSPHERICS/components/omni_devices/mixer.dm index 171eaa254a..4162000c6a 100644 --- a/code/ATMOSPHERICS/components/omni_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/omni_devices/mixer.dm @@ -115,13 +115,6 @@ var/power_draw = -1 if (transfer_moles > MINUMUM_MOLES_TO_FILTER) power_draw = mix_gas(mixing_inputs, output, transfer_moles, active_power_usage) - - for(var/datum/omni_port/P in inputs) - if(P.concentration && P.network) - P.network.update = 1 - - if(output.network) - output.network.update = 1 if (power_draw < 0) //update_use_power(0) @@ -129,6 +122,13 @@ last_flow_rate = 0 else handle_power_draw(power_draw) + + for(var/datum/omni_port/P in inputs) + if(P.concentration && P.network) + P.network.update = 1 + + if(output.network) + output.network.update = 1 return 1 diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index eb69e21ce8..23dd7132db 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -170,9 +170,6 @@ transfer_moles = min(transfer_moles, environment.total_moles*MAX_SIPHON_FLOWRATE/environment.volume) //group_multiplier gets divided out here power_draw = pump_gas(environment, air_contents, transfer_moles, active_power_usage) - - if(network) - network.update = 1 if (power_draw < 0) last_power_draw = 0 @@ -181,7 +178,9 @@ use_power = 0 //don't force update - easier on CPU else last_power_draw = handle_power_draw(power_draw) - + if(network) + network.update = 1 + return 1 /obj/machinery/atmospherics/unary/vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 44e13ffd3e..97deaedc92 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -129,7 +129,7 @@ var/power_draw = -1 if(scrubbing) //limit flow rate from turfs - var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_FILTER_FLOWRATE/environment.volume) //group_multiplier gets divided out here + var/transfer_moles = min(environment.total_moles, environment.total_moles*MAX_SCRUBBER_FLOWRATE/environment.volume) //group_multiplier gets divided out here power_draw = scrub_gas(scrubbing_gas, environment, air_contents, transfer_moles, active_power_usage) else //Just siphon all air diff --git a/code/setup.dm b/code/setup.dm index e2582f8a9a..c11dc1c893 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -830,10 +830,8 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse /* Atmos Machinery */ - -//Note: anything higher than these values has no effect at the moment. -#define MAX_SIPHON_FLOWRATE 2500 //L/s This can be used to balance how fast a room is siphoned. -#define MAX_FILTER_FLOWRATE 200 //L/s +#define MAX_SIPHON_FLOWRATE 2500 //L/s This can be used to balance how fast a room is siphoned. Anything higher than CELL_VOLUME has no effect. +#define MAX_SCRUBBER_FLOWRATE 200 //L/s Max flow rate when scrubbing from a turf. //These balance how easy or hard it is to create huge pressure gradients with pumps and filters. Lower values means it takes longer to create large pressures differences. //Has no effect on pumping gasses from high pressure to low, only from low to high. Must be between 0 and 1. @@ -844,7 +842,7 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define MINUMUM_MOLES_TO_PUMP 0.01 #define MINUMUM_MOLES_TO_FILTER 0.1 -//The flow rate/effectiveness of various atmos devices is limited by their internal volume, so these will control maximum flow rates in L/s +//The flow rate/effectiveness of various atmos devices is limited by their internal volume, so for many atmos devices these will control maximum flow rates in L/s #define ATMOS_DEFAULT_VOLUME_PUMP 200 //L #define ATMOS_DEFAULT_VOLUME_FILTER 200 //L #define ATMOS_DEFAULT_VOLUME_MIXER 200 //L