diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
index c24b92b5d3a..39f12bc2ac1 100644
--- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
@@ -1,4 +1,4 @@
-obj/machinery/atmospherics/binary
+/obj/machinery/atmospherics/binary
dir = SOUTH
initialize_directions = SOUTH|NORTH
use_power = 1
@@ -11,125 +11,126 @@ obj/machinery/atmospherics/binary
var/datum/pipe_network/network1
var/datum/pipe_network/network2
+ var/list/activity_log = list()
- New()
- ..()
- switch(dir)
- if(NORTH)
- initialize_directions = NORTH|SOUTH
- if(SOUTH)
- initialize_directions = NORTH|SOUTH
- if(EAST)
- initialize_directions = EAST|WEST
- if(WEST)
- initialize_directions = EAST|WEST
- air1 = new
- air2 = new
+/obj/machinery/atmospherics/binary/New()
+ ..()
+ switch(dir)
+ if(NORTH)
+ initialize_directions = NORTH|SOUTH
+ if(SOUTH)
+ initialize_directions = NORTH|SOUTH
+ if(EAST)
+ initialize_directions = EAST|WEST
+ if(WEST)
+ initialize_directions = EAST|WEST
+ air1 = new
+ air2 = new
- air1.volume = 200
- air2.volume = 200
+ air1.volume = 200
+ air2.volume = 200
- buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
- dir = pipe.dir
- initialize_directions = pipe.get_pipe_dir()
- if (pipe.pipename)
- name = pipe.pipename
- var/turf/T = loc
- level = T.intact ? 2 : 1
- initialize()
- build_network()
- if (node1)
- node1.initialize()
- node1.build_network()
- if (node2)
- node2.initialize()
- node2.build_network()
- return 1
+/obj/machinery/atmospherics/binary/buildFrom(var/mob/usr,var/obj/item/pipe/pipe)
+ dir = pipe.dir
+ initialize_directions = pipe.get_pipe_dir()
+ if (pipe.pipename)
+ name = pipe.pipename
+ var/turf/T = loc
+ level = T.intact ? 2 : 1
+ initialize()
+ build_network()
+ if (node1)
+ node1.initialize()
+ node1.build_network()
+ if (node2)
+ node2.initialize()
+ node2.build_network()
+ return 1
// Housekeeping and pipe network stuff below
- network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(reference == node1)
- network1 = new_network
+/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
+ if(reference == node1)
+ network1 = new_network
- else if(reference == node2)
- network2 = new_network
+ else if(reference == node2)
+ network2 = new_network
- if(new_network.normal_members.Find(src))
- return 0
+ if(new_network.normal_members.Find(src))
+ return 0
- new_network.normal_members += src
+ new_network.normal_members += src
- return null
+ return null
- Destroy()
- if(node1)
- node1.disconnect(src)
- del(network1)
- if(node2)
- node2.disconnect(src)
- del(network2)
+/obj/machinery/atmospherics/binary/Destroy()
+ if(node1)
+ node1.disconnect(src)
+ del(network1)
+ if(node2)
+ node2.disconnect(src)
+ del(network2)
+ node1 = null
+ node2 = null
+
+ ..()
+
+/obj/machinery/atmospherics/binary/initialize()
+ if(node1 && node2) return
+
+ node1 = findConnecting(turn(dir, 180))
+ node2 = findConnecting(dir)
+
+ update_icon()
+
+/obj/machinery/atmospherics/binary/build_network()
+ if(!network1 && node1)
+ network1 = new /datum/pipe_network()
+ network1.normal_members += src
+ network1.build_network(node1, src)
+
+ if(!network2 && node2)
+ network2 = new /datum/pipe_network()
+ network2.normal_members += src
+ network2.build_network(node2, src)
+
+
+/obj/machinery/atmospherics/binary/return_network(obj/machinery/atmospherics/reference)
+ build_network()
+
+ if(reference==node1)
+ return network1
+
+ if(reference==node2)
+ return network2
+
+ return null
+
+/obj/machinery/atmospherics/binary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
+ if(network1 == old_network)
+ network1 = new_network
+ if(network2 == old_network)
+ network2 = new_network
+
+ return 1
+
+/obj/machinery/atmospherics/binary/return_network_air(datum/pipe_network/reference)
+ var/list/results = list()
+
+ if(network1 == reference)
+ results += air1
+ if(network2 == reference)
+ results += air2
+
+ return results
+
+/obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference)
+ if(reference==node1)
+ del(network1)
node1 = null
+
+ else if(reference==node2)
+ del(network2)
node2 = null
- ..()
-
- initialize()
- if(node1 && node2) return
-
- node1 = findConnecting(turn(dir, 180))
- node2 = findConnecting(dir)
-
- update_icon()
-
- build_network()
- if(!network1 && node1)
- network1 = new /datum/pipe_network()
- network1.normal_members += src
- network1.build_network(node1, src)
-
- if(!network2 && node2)
- network2 = new /datum/pipe_network()
- network2.normal_members += src
- network2.build_network(node2, src)
-
-
- return_network(obj/machinery/atmospherics/reference)
- build_network()
-
- if(reference==node1)
- return network1
-
- if(reference==node2)
- return network2
-
- return null
-
- reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- if(network1 == old_network)
- network1 = new_network
- if(network2 == old_network)
- network2 = new_network
-
- return 1
-
- return_network_air(datum/pipe_network/reference)
- var/list/results = list()
-
- if(network1 == reference)
- results += air1
- if(network2 == reference)
- results += air2
-
- return results
-
- disconnect(obj/machinery/atmospherics/reference)
- if(reference==node1)
- del(network1)
- node1 = null
-
- else if(reference==node2)
- del(network2)
- node2 = null
-
- return null
\ No newline at end of file
+ return null
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index a197b871c66..3c8fc6d92ea 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -1,4 +1,4 @@
-obj/machinery/atmospherics/binary/passive_gate
+/obj/machinery/atmospherics/binary/passive_gate
//Tries to achieve target pressure at output (like a normal pump) except
// Uses no power but can not transfer gases from a low pressure area to a high pressure area
icon = 'icons/obj/atmospherics/passive_gate.dmi'
@@ -14,175 +14,177 @@ obj/machinery/atmospherics/binary/passive_gate
var/id_tag = null
var/datum/radio_frequency/radio_connection
- update_icon()
- if(stat & NOPOWER)
- icon_state = "intact_off"
- else if(node1 && node2)
- icon_state = "intact_[on?("on"):("off")]"
+/obj/machinery/atmospherics/binary/passive_gate/update_icon()
+ if(stat & NOPOWER)
+ icon_state = "intact_off"
+ else if(node1 && node2)
+ icon_state = "intact_[on?("on"):("off")]"
+ else
+ if(node1)
+ icon_state = "exposed_1_off"
+ else if(node2)
+ icon_state = "exposed_2_off"
else
- if(node1)
- icon_state = "exposed_1_off"
- else if(node2)
- icon_state = "exposed_2_off"
- else
- icon_state = "exposed_3_off"
- return
+ icon_state = "exposed_3_off"
+ return
- process()
- ..()
- if(!on)
- return 0
+/obj/machinery/atmospherics/binary/passive_gate/process()
+ ..()
+ if(!on)
+ return 0
- var/output_starting_pressure = air2.return_pressure()
- var/input_starting_pressure = air1.return_pressure()
+ var/output_starting_pressure = air2.return_pressure()
+ var/input_starting_pressure = air1.return_pressure()
- if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10))
- //No need to pump gas if target is already reached or input pressure is too low
- //Need at least 10 KPa difference to overcome friction in the mechanism
- return 1
+ if(output_starting_pressure >= min(target_pressure,input_starting_pressure-10))
+ //No need to pump gas if target is already reached or input pressure is too low
+ //Need at least 10 KPa difference to overcome friction in the mechanism
+ return 1
- //Calculate necessary moles to transfer using PV = nRT
- if((air1.total_moles() > 0) && (air1.temperature>0))
- var/pressure_delta = min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2)
- //Can not have a pressure delta that would cause output_pressure > input_pressure
+ //Calculate necessary moles to transfer using PV = nRT
+ if((air1.total_moles() > 0) && (air1.temperature>0))
+ var/pressure_delta = min(target_pressure - output_starting_pressure, (input_starting_pressure - output_starting_pressure)/2)
+ //Can not have a pressure delta that would cause output_pressure > input_pressure
- var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
+ var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
- //Actually transfer the gas
- var/datum/gas_mixture/removed = air1.remove(transfer_moles)
- air2.merge(removed)
+ //Actually transfer the gas
+ var/datum/gas_mixture/removed = air1.remove(transfer_moles)
+ air2.merge(removed)
- if(network1)
- network1.update = 1
+ if(network1)
+ network1.update = 1
- if(network2)
- network2.update = 1
+ if(network2)
+ network2.update = 1
- //Radio remote control
+//Radio remote control
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- if(frequency)
- radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA)
- broadcast_status()
- if(!radio_connection)
- return 0
+/obj/machinery/atmospherics/binary/passive_gate/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ if(frequency)
+ radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
+/obj/machinery/atmospherics/binary/passive_gate/proc/broadcast_status()
+ if(!radio_connection)
+ return 0
- signal.data = list(
- "tag" = id_tag,
- "device" = "AGP",
- "power" = on,
- "target_output" = target_pressure,
- "sigtype" = "status"
- )
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.source = src
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
+ signal.data = list(
+ "tag" = id_tag,
+ "device" = "AGP",
+ "power" = on,
+ "target_output" = target_pressure,
+ "sigtype" = "status"
+ )
- return 1
+ radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
- interact(mob/user as mob)
- var/dat = {"Power: [on?"On":"Off"]
- Desirable output pressure:
- [round(target_pressure,0.1)]kPa | Change
- "}
+ return 1
- user << browse("
[src.name] control[dat]", "window=atmo_pump")
- onclose(user, "atmo_pump")
+/obj/machinery/atmospherics/binary/passive_gate/interact(mob/user as mob)
+ var/dat = {"Power: [on?"On":"Off"]
+ Desirable output pressure:
+ [round(target_pressure,0.1)]kPa | Change
+ "}
- initialize()
- ..()
- if(frequency)
- set_frequency(frequency)
+ user << browse("[src.name] control[dat]", "window=atmo_pump")
+ onclose(user, "atmo_pump")
- receive_signal(datum/signal/signal)
- if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
- return 0
+/obj/machinery/atmospherics/binary/passive_gate/initialize()
+ ..()
+ if(frequency)
+ set_frequency(frequency)
- if("power" in signal.data)
- on = text2num(signal.data["power"])
+/obj/machinery/atmospherics/binary/passive_gate/receive_signal(datum/signal/signal)
+ if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
+ return 0
- if("power_toggle" in signal.data)
- on = !on
+ if("power" in signal.data)
+ on = text2num(signal.data["power"])
- if("set_output_pressure" in signal.data)
- target_pressure = between(
- 0,
- text2num(signal.data["set_output_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ if("power_toggle" in signal.data)
+ on = !on
- if("status" in signal.data)
- spawn(2)
- broadcast_status()
- return //do not update_icon
+ if("set_output_pressure" in signal.data)
+ target_pressure = between(
+ 0,
+ text2num(signal.data["set_output_pressure"]),
+ ONE_ATMOSPHERE*50
+ )
+ if("status" in signal.data)
spawn(2)
broadcast_status()
- update_icon()
+ return //do not update_icon
+
+ spawn(2)
+ broadcast_status()
+ update_icon()
+ activity_log += text("\[[time_stamp()]\] Remote signal powered us [on ? "on" : "off"]")
+ return
+
+
+
+/obj/machinery/atmospherics/binary/passive_gate/attack_hand(user as mob)
+ if(..())
return
-
-
-
- attack_hand(user as mob)
- if(..())
- return
- src.add_fingerprint(usr)
- if(!src.allowed(user))
- user << "\red Access denied."
- return
- usr.set_machine(src)
- interact(user)
+ src.add_fingerprint(usr)
+ if(!src.allowed(user))
+ user << "\red Access denied."
return
+ usr.set_machine(src)
+ interact(user)
+ return
- Topic(href,href_list)
- if(..()) return
- if(href_list["power"])
- on = !on
- if(href_list["set_press"])
- var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num
- src.target_pressure = max(0, min(4500, new_pressure))
- usr.set_machine(src)
- src.update_icon()
- src.updateUsrDialog()
- return
+/obj/machinery/atmospherics/binary/passive_gate/Topic(href,href_list)
+ if(..()) return
+ if(href_list["power"])
+ on = !on
+ activity_log += text("\[[time_stamp()]\] Real name: [], Key: [] - turned [] \the [].",usr.real_name, usr.key,(on ? "on" : "off"),src)
+ if(href_list["set_press"])
+ var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num
+ src.target_pressure = max(0, min(4500, new_pressure))
+ usr.set_machine(src)
+ src.update_icon()
+ src.updateUsrDialog()
+ return
- power_change()
- ..()
- update_icon()
+/obj/machinery/atmospherics/binary/passive_gate/power_change()
+ ..()
+ update_icon()
- attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!istype(W, /obj/item/weapon/wrench))
- return ..()
- if (on)
- user << "\red You cannot unwrench this [src], turn it off first."
- return 1
- var/turf/T = src.loc
- if (level==1 && isturf(T) && T.intact)
- user << "\red You must remove the plating first."
- return 1
- var/datum/gas_mixture/int_air = return_air()
- var/datum/gas_mixture/env_air = loc.return_air()
- if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
- user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
- add_fingerprint(user)
- return 1
- playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
- user << "\blue You begin to unfasten \the [src]..."
- if (do_after(user, 40))
- user.visible_message( \
- "[user] unfastens \the [src].", \
- "\blue You have unfastened \the [src].", \
- "You hear ratchet.")
- new /obj/item/pipe(loc, make_from=src)
- del(src)
+/obj/machinery/atmospherics/binary/passive_gate/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ if (!istype(W, /obj/item/weapon/wrench))
+ return ..()
+ if (on)
+ user << "\red You cannot unwrench this [src], turn it off first."
+ return 1
+ var/turf/T = src.loc
+ if (level==1 && isturf(T) && T.intact)
+ user << "\red You must remove the plating first."
+ return 1
+ var/datum/gas_mixture/int_air = return_air()
+ var/datum/gas_mixture/env_air = loc.return_air()
+ if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
+ user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
+ add_fingerprint(user)
+ return 1
+ playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
+ user << "\blue You begin to unfasten \the [src]..."
+ if (do_after(user, 40))
+ user.visible_message( \
+ "[user] unfastens \the [src].", \
+ "\blue You have unfastened \the [src].", \
+ "You hear ratchet.")
+ new /obj/item/pipe(loc, make_from=src)
+ del(src)
diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index c2cd36950f4..4f0fd7b1cc1 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -12,7 +12,7 @@ Thus, the two variables affect pump operation are set in New():
but overall network volume is also increased as this increases...
*/
-obj/machinery/atmospherics/binary/pump
+/obj/machinery/atmospherics/binary/pump
icon = 'icons/obj/atmospherics/pump.dmi'
icon_state = "intact_off"
@@ -26,180 +26,182 @@ obj/machinery/atmospherics/binary/pump
var/id_tag = null
var/datum/radio_frequency/radio_connection
- highcap
- name = "High capacity gas pump"
- desc = "A high capacity pump"
+/obj/machinery/atmospherics/binary/pump/highcap
+ name = "High capacity gas pump"
+ desc = "A high capacity pump"
- target_pressure = 15000000
+ target_pressure = 15000000
- on
- on = 1
- icon_state = "intact_on"
+/obj/machinery/atmospherics/binary/pump/on
+ on = 1
+ icon_state = "intact_on"
- update_icon()
- if(stat & NOPOWER)
- icon_state = "intact_off"
- else if(node1 && node2)
- icon_state = "intact_[on?("on"):("off")]"
+/obj/machinery/atmospherics/binary/pump/update_icon()
+ if(stat & NOPOWER)
+ icon_state = "intact_off"
+ else if(node1 && node2)
+ icon_state = "intact_[on?("on"):("off")]"
+ else
+ if(node1)
+ icon_state = "exposed_1_off"
+ else if(node2)
+ icon_state = "exposed_2_off"
else
- if(node1)
- icon_state = "exposed_1_off"
- else if(node2)
- icon_state = "exposed_2_off"
- else
- icon_state = "exposed_3_off"
- return
+ icon_state = "exposed_3_off"
+ return
- process()
+/obj/machinery/atmospherics/binary/pump/process()
// ..()
- if(stat & (NOPOWER|BROKEN))
- return
- if(!on)
- return 0
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if(!on)
+ return 0
- var/output_starting_pressure = air2.return_pressure()
-
- if( (target_pressure - output_starting_pressure) < 0.01)
- //No need to pump gas if target is already reached!
- return 1
-
- //Calculate necessary moles to transfer using PV=nRT
- if((air1.total_moles() > 0) && (air1.temperature>0))
- var/pressure_delta = target_pressure - output_starting_pressure
- var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
-
- //Actually transfer the gas
- var/datum/gas_mixture/removed = air1.remove(transfer_moles)
- air2.merge(removed)
-
- if(network1)
- network1.update = 1
-
- if(network2)
- network2.update = 1
+ var/output_starting_pressure = air2.return_pressure()
+ if( (target_pressure - output_starting_pressure) < 0.01)
+ //No need to pump gas if target is already reached!
return 1
- //Radio remote control
+ //Calculate necessary moles to transfer using PV=nRT
+ if((air1.total_moles() > 0) && (air1.temperature>0))
+ var/pressure_delta = target_pressure - output_starting_pressure
+ var/transfer_moles = pressure_delta*air2.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- if(frequency)
- radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA)
+ //Actually transfer the gas
+ var/datum/gas_mixture/removed = air1.remove(transfer_moles)
+ air2.merge(removed)
- broadcast_status()
- if(!radio_connection)
- return 0
+ if(network1)
+ network1.update = 1
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
+ if(network2)
+ network2.update = 1
- signal.data = list(
- "tag" = id_tag,
- "device" = "AGP",
- "power" = on,
- "target_output" = target_pressure,
- "sigtype" = "status"
- )
+ return 1
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
+//Radio remote control
- return 1
- interact(mob/user as mob)
- var/dat = {"Power: [on?"On":"Off"]
- Desirable output pressure:
- [round(target_pressure,0.1)]kPa | Change
- "}
+/obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ if(frequency)
+ radio_connection = radio_controller.add_object(src, frequency, filter = RADIO_ATMOSIA)
- user << browse("[src.name] control[dat]", "window=atmo_pump")
- onclose(user, "atmo_pump")
+/obj/machinery/atmospherics/binary/pump/proc/broadcast_status()
+ if(!radio_connection)
+ return 0
- initialize()
- ..()
- if(frequency)
- set_frequency(frequency)
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.source = src
- receive_signal(datum/signal/signal)
- if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
- return 0
+ signal.data = list(
+ "tag" = id_tag,
+ "device" = "AGP",
+ "power" = on,
+ "target_output" = target_pressure,
+ "sigtype" = "status"
+ )
- if("power" in signal.data)
- on = text2num(signal.data["power"])
+ radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
- if("power_toggle" in signal.data)
- on = !on
+ return 1
- if("set_output_pressure" in signal.data)
- target_pressure = between(
- 0,
- text2num(signal.data["set_output_pressure"]),
- ONE_ATMOSPHERE*50
- )
+/obj/machinery/atmospherics/binary/pump/interact(mob/user as mob)
+ var/dat = {"Power: [on?"On":"Off"]
+ Desirable output pressure:
+ [round(target_pressure,0.1)]kPa | Change
+ "}
- if("status" in signal.data)
- spawn(2)
- broadcast_status()
- return //do not update_icon
+ user << browse("[src.name] control[dat]", "window=atmo_pump")
+ onclose(user, "atmo_pump")
+/obj/machinery/atmospherics/binary/pump/initialize()
+ ..()
+ if(frequency)
+ set_frequency(frequency)
+
+/obj/machinery/atmospherics/binary/pump/receive_signal(datum/signal/signal)
+ if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
+ return 0
+
+ if("power" in signal.data)
+ on = text2num(signal.data["power"])
+
+ if("power_toggle" in signal.data)
+ on = !on
+
+ if("set_output_pressure" in signal.data)
+ target_pressure = between(
+ 0,
+ text2num(signal.data["set_output_pressure"]),
+ ONE_ATMOSPHERE*50
+ )
+
+ if("status" in signal.data)
spawn(2)
broadcast_status()
- update_icon()
+ return //do not update_icon
+
+ spawn(2)
+ broadcast_status()
+ update_icon()
+ activity_log += text("\[[time_stamp()]\] Remote signal toggled us [on ? "on" : "off"]")
+ return
+
+
+/obj/machinery/atmospherics/binary/pump/attack_hand(user as mob)
+ if(..())
return
-
-
- attack_hand(user as mob)
- if(..())
- return
- src.add_fingerprint(usr)
- if(!src.allowed(user))
- user << "\red Access denied."
- return
- usr.set_machine(src)
- interact(user)
+ src.add_fingerprint(usr)
+ if(!src.allowed(user))
+ user << "\red Access denied."
return
+ usr.set_machine(src)
+ interact(user)
+ return
- Topic(href,href_list)
- if(..()) return
- if(href_list["power"])
- on = !on
- if(href_list["set_press"])
- var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num
- src.target_pressure = max(0, min(4500, new_pressure))
- usr.set_machine(src)
- src.update_icon()
- src.updateUsrDialog()
- return
+/obj/machinery/atmospherics/binary/pump/Topic(href,href_list)
+ if(..()) return
+ if(href_list["power"])
+ on = !on
+ activity_log += text("\[[time_stamp()]\] Real name: [], Key: [] - turned [] \the [].",usr.real_name, usr.key,(on ? "on" : "off"),src)
+ if(href_list["set_press"])
+ var/new_pressure = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",src.target_pressure) as num
+ src.target_pressure = max(0, min(4500, new_pressure))
+ usr.set_machine(src)
+ src.update_icon()
+ src.updateUsrDialog()
+ return
- power_change()
- ..()
- update_icon()
+/obj/machinery/atmospherics/binary/pump/power_change()
+ ..()
+ update_icon()
- attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!istype(W, /obj/item/weapon/wrench))
- return ..()
- if (!(stat & NOPOWER) && on)
- user << "\red You cannot unwrench this [src], turn it off first."
- return 1
- var/turf/T = src.loc
- if (level==1 && isturf(T) && T.intact)
- user << "\red You must remove the plating first."
- return 1
- var/datum/gas_mixture/int_air = return_air()
- var/datum/gas_mixture/env_air = loc.return_air()
- if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
- user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
- add_fingerprint(user)
- return 1
- playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
- user << "\blue You begin to unfasten \the [src]..."
- if (do_after(user, 40))
- user.visible_message( \
- "[user] unfastens \the [src].", \
- "\blue You have unfastened \the [src].", \
- "You hear ratchet.")
- new /obj/item/pipe(loc, make_from=src)
- del(src)
+/obj/machinery/atmospherics/binary/pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ if (!istype(W, /obj/item/weapon/wrench))
+ return ..()
+ if (!(stat & NOPOWER) && on)
+ user << "\red You cannot unwrench this [src], turn it off first."
+ return 1
+ var/turf/T = src.loc
+ if (level==1 && isturf(T) && T.intact)
+ user << "\red You must remove the plating first."
+ return 1
+ var/datum/gas_mixture/int_air = return_air()
+ var/datum/gas_mixture/env_air = loc.return_air()
+ if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
+ user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
+ add_fingerprint(user)
+ return 1
+ playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
+ user << "\blue You begin to unfasten \the [src]..."
+ if (do_after(user, 40))
+ user.visible_message( \
+ "[user] unfastens \the [src].", \
+ "\blue You have unfastened \the [src].", \
+ "You hear ratchet.")
+ new /obj/item/pipe(loc, make_from=src)
+ del(src)
diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
index cd2104bfe41..53db42bee89 100644
--- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
@@ -12,7 +12,7 @@ Thus, the two variables affect pump operation are set in New():
but overall network volume is also increased as this increases...
*/
-obj/machinery/atmospherics/binary/volume_pump
+/obj/machinery/atmospherics/binary/volume_pump
icon = 'icons/obj/atmospherics/volume_pump.dmi'
icon_state = "intact_off"
@@ -26,174 +26,175 @@ obj/machinery/atmospherics/binary/volume_pump
var/id_tag = null
var/datum/radio_frequency/radio_connection
- on
- on = 1
- icon_state = "intact_on"
+/obj/machinery/atmospherics/binary/volume_pump/on
+ on = 1
+ icon_state = "intact_on"
- update_icon()
- if(stat & NOPOWER)
- icon_state = "intact_off"
- else if(node1 && node2)
- icon_state = "intact_[on?("on"):("off")]"
+/obj/machinery/atmospherics/binary/volume_pump/update_icon()
+ if(stat & NOPOWER)
+ icon_state = "intact_off"
+ else if(node1 && node2)
+ icon_state = "intact_[on?("on"):("off")]"
+ else
+ if(node1)
+ icon_state = "exposed_1_off"
+ else if(node2)
+ icon_state = "exposed_2_off"
else
- if(node1)
- icon_state = "exposed_1_off"
- else if(node2)
- icon_state = "exposed_2_off"
- else
- icon_state = "exposed_3_off"
- return
+ icon_state = "exposed_3_off"
+ return
- process()
+/obj/machinery/atmospherics/binary/volume_pump/process()
// ..()
- if(stat & (NOPOWER|BROKEN))
- return
- if(!on || transfer_rate < 1)
- return 0
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if(!on || transfer_rate < 1)
+ return 0
// Pump mechanism just won't do anything if the pressure is too high/too low
- var/input_starting_pressure = air1.return_pressure()
- var/output_starting_pressure = air2.return_pressure()
-
- if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000))
- return 1
-
- var/transfer_ratio = max(1, transfer_rate/air1.volume)
-
- var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
-
- air2.merge(removed)
-
- if(network1)
- network1.update = 1
-
- if(network2)
- network2.update = 1
+ var/input_starting_pressure = air1.return_pressure()
+ var/output_starting_pressure = air2.return_pressure()
+ if((input_starting_pressure < 0.01) || (output_starting_pressure > 9000))
return 1
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- if(frequency)
- radio_connection = radio_controller.add_object(src, frequency)
+ var/transfer_ratio = max(1, transfer_rate/air1.volume)
- broadcast_status()
- if(!radio_connection)
- return 0
+ var/datum/gas_mixture/removed = air1.remove_ratio(transfer_ratio)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
+ air2.merge(removed)
- signal.data = list(
- "tag" = id_tag,
- "device" = "APV",
- "power" = on,
- "transfer_rate" = transfer_rate,
- "sigtype" = "status"
- )
- radio_connection.post_signal(src, signal)
+ if(network1)
+ network1.update = 1
- return 1
+ if(network2)
+ network2.update = 1
- interact(mob/user as mob)
- var/dat = {"Power: [on?"On":"Off"]
- Desirable output flow:
- [round(transfer_rate,1)]l/s | Change
- "}
+ return 1
- user << browse("[src.name] control[dat]", "window=atmo_pump")
- onclose(user, "atmo_pump")
+/obj/machinery/atmospherics/binary/volume_pump/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ if(frequency)
+ radio_connection = radio_controller.add_object(src, frequency)
+
+/obj/machinery/atmospherics/binary/volume_pump/proc/broadcast_status()
+ if(!radio_connection)
+ return 0
+
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.source = src
+
+ signal.data = list(
+ "tag" = id_tag,
+ "device" = "APV",
+ "power" = on,
+ "transfer_rate" = transfer_rate,
+ "sigtype" = "status"
+ )
+ radio_connection.post_signal(src, signal)
+
+ return 1
+
+/obj/machinery/atmospherics/binary/volume_pump/interact(mob/user as mob)
+ var/dat = {"Power: [on?"On":"Off"]
+ Desirable output flow:
+ [round(transfer_rate,1)]l/s | Change
+ "}
+
+ user << browse("[src.name] control[dat]", "window=atmo_pump")
+ onclose(user, "atmo_pump")
- initialize()
- ..()
+/obj/machinery/atmospherics/binary/volume_pump/initialize()
+ ..()
- set_frequency(frequency)
+ set_frequency(frequency)
- receive_signal(datum/signal/signal)
- if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
- return 0
+/obj/machinery/atmospherics/binary/volume_pump/receive_signal(datum/signal/signal)
+ if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command"))
+ return 0
- if("power" in signal.data)
- on = text2num(signal.data["power"])
+ if("power" in signal.data)
+ on = text2num(signal.data["power"])
- if("power_toggle" in signal.data)
- on = !on
+ if("power_toggle" in signal.data)
+ on = !on
- if("set_transfer_rate" in signal.data)
- transfer_rate = between(
- 0,
- text2num(signal.data["set_transfer_rate"]),
- air1.volume
- )
-
- if("status" in signal.data)
- spawn(2)
- broadcast_status()
- return //do not update_icon
+ if("set_transfer_rate" in signal.data)
+ transfer_rate = between(
+ 0,
+ text2num(signal.data["set_transfer_rate"]),
+ air1.volume
+ )
+ if("status" in signal.data)
spawn(2)
broadcast_status()
- update_icon()
+ return //do not update_icon
+
+ spawn(2)
+ broadcast_status()
+ update_icon()
+ activity_log += text("\[[time_stamp()]\] Remote signal toggled us [on ? "on" : "off"]")
- attack_hand(user as mob)
- if(..())
- return
- src.add_fingerprint(usr)
- if(!src.allowed(user))
- user << "\red Access denied."
- return
- usr.set_machine(src)
- interact(user)
+/obj/machinery/atmospherics/binary/volume_pump/attack_hand(user as mob)
+ if(..())
return
-
- Topic(href,href_list)
- if(..()) return
- if(href_list["power"])
- on = !on
- if(href_list["set_transfer_rate"])
- var/new_transfer_rate = input(usr,"Enter new output volume (0-200l/s)","Flow control",src.transfer_rate) as num
- src.transfer_rate = max(0, min(200, new_transfer_rate))
- usr.set_machine(src)
- src.update_icon()
- src.updateUsrDialog()
+ src.add_fingerprint(usr)
+ if(!src.allowed(user))
+ user << "\red Access denied."
return
+ usr.set_machine(src)
+ interact(user)
+ return
- power_change()
- ..()
- update_icon()
+/obj/machinery/atmospherics/binary/volume_pump/Topic(href,href_list)
+ if(..()) return
+ if(href_list["power"])
+ on = !on
+ activity_log += text("\[[time_stamp()]\] Real name: [], Key: [] - turned [] \the [].",usr.real_name, usr.key,(on ? "on" : "off"),src)
+ if(href_list["set_transfer_rate"])
+ var/new_transfer_rate = input(usr,"Enter new output volume (0-200l/s)","Flow control",src.transfer_rate) as num
+ src.transfer_rate = max(0, min(200, new_transfer_rate))
+ usr.set_machine(src)
+ src.update_icon()
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/atmospherics/binary/volume_pump/power_change()
+ ..()
+ update_icon()
- attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!istype(W, /obj/item/weapon/wrench))
- return ..()
- if (!(stat & NOPOWER) && on)
- user << "\red You cannot unwrench this [src], turn it off first."
- return 1
- var/turf/T = src.loc
- if (level==1 && isturf(T) && T.intact)
- user << "\red You must remove the plating first."
- return 1
- var/datum/gas_mixture/int_air = return_air()
- var/datum/gas_mixture/env_air = loc.return_air()
- if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
- user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
- add_fingerprint(user)
- return 1
- playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
- user << "\blue You begin to unfasten \the [src]..."
- if (do_after(user, 40))
- user.visible_message( \
- "[user] unfastens \the [src].", \
- "\blue You have unfastened \the [src].", \
- "You hear ratchet.")
- new /obj/item/pipe(loc, make_from=src)
- del(src)
+/obj/machinery/atmospherics/binary/volume_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ if (!istype(W, /obj/item/weapon/wrench))
+ return ..()
+ if (!(stat & NOPOWER) && on)
+ user << "\red You cannot unwrench this [src], turn it off first."
+ return 1
+ var/turf/T = src.loc
+ if (level==1 && isturf(T) && T.intact)
+ user << "\red You must remove the plating first."
+ return 1
+ var/datum/gas_mixture/int_air = return_air()
+ var/datum/gas_mixture/env_air = loc.return_air()
+ if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
+ user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
+ add_fingerprint(user)
+ return 1
+ playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1)
+ user << "\blue You begin to unfasten \the [src]..."
+ if (do_after(user, 40))
+ user.visible_message( \
+ "[user] unfastens \the [src].", \
+ "\blue You have unfastened \the [src].", \
+ "You hear ratchet.")
+ new /obj/item/pipe(loc, make_from=src)
+ del(src)