From efe819ec7caa60a5886de836a74c4bf1579ab84f Mon Sep 17 00:00:00 2001 From: Ater Ignis Date: Sun, 11 Nov 2012 03:26:37 +0400 Subject: [PATCH 1/2] Updated cycling airlocks New controller can check secondary sensor (tag 'sensor_tag_int ') for current pressure inside of station. --- code/game/machinery/airlock_control.dm | 18 +++++ .../embedded_controller/airlock_controller.dm | 67 ++++++++++++++++++- 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index ec1667ad0c..ae60ec8cb3 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -73,6 +73,24 @@ obj/machinery/door/airlock/close(surpress_send) if(!surpress_send) send_status() +obj/machinery/door/airlock/Bumped(atom/AM) + ..(AM) + if(istype(AM, /obj/mecha)) + var/obj/mecha/mecha = AM + if(density && radio_connection && mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.data["tag"] = id_tag + signal.data["timestamp"] = world.time + + signal.data["door_status"] = density?("closed"):("open") + signal.data["lock_status"] = locked?("locked"):("unlocked") + + signal.data["bumped_with_access"] = 1 + + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + return + obj/machinery/door/airlock/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) if(new_frequency) diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index cd6af5b334..a997dcfdac 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -4,6 +4,7 @@ #define AIRLOCK_STATE_CLOSED 0 #define AIRLOCK_STATE_DEPRESSURIZE 1 #define AIRLOCK_STATE_OUTOPEN 2 +#define AIRLOCK_STATE_BOTHOPEN 3 datum/computer/file/embedded_program/airlock_controller var/id_tag @@ -11,11 +12,13 @@ datum/computer/file/embedded_program/airlock_controller var/interior_door_tag var/airpump_tag var/sensor_tag + var/sensor_tag_int var/sanitize_external state = AIRLOCK_STATE_CLOSED var/target_state = AIRLOCK_STATE_CLOSED var/sensor_pressure = null + var/int_sensor_pressure = ONE_ATMOSPHERE receive_signal(datum/signal/signal, receive_method, receive_param) var/receive_tag = signal.data["tag"] @@ -24,12 +27,19 @@ datum/computer/file/embedded_program/airlock_controller if(receive_tag==sensor_tag) if(signal.data["pressure"]) sensor_pressure = text2num(signal.data["pressure"]) + else if(receive_tag==sensor_tag_int) + if(signal.data["pressure"]) + int_sensor_pressure = text2num(signal.data["pressure"]) else if(receive_tag==exterior_door_tag) memory["exterior_status"] = signal.data["door_status"] + if(signal.data["bumped_with_access"]) + target_state = AIRLOCK_STATE_OUTOPEN else if(receive_tag==interior_door_tag) memory["interior_status"] = signal.data["door_status"] + if(signal.data["bumped_with_access"]) + target_state = AIRLOCK_STATE_INOPEN else if(receive_tag==airpump_tag) if(signal.data["power"]) @@ -39,6 +49,10 @@ datum/computer/file/embedded_program/airlock_controller else if(receive_tag==id_tag) switch(signal.data["command"]) + if("cycle_exterior") + target_state = AIRLOCK_STATE_OUTOPEN + if("cycle_interior") + target_state = AIRLOCK_STATE_INOPEN if("cycle") if(state < AIRLOCK_STATE_CLOSED) target_state = AIRLOCK_STATE_OUTOPEN @@ -59,6 +73,42 @@ datum/computer/file/embedded_program/airlock_controller target_state = AIRLOCK_STATE_INOPEN if("abort") target_state = AIRLOCK_STATE_CLOSED + if("force_both") + target_state = AIRLOCK_STATE_BOTHOPEN + state = AIRLOCK_STATE_BOTHOPEN + var/datum/signal/signal = new + signal.data["tag"] = interior_door_tag + signal.data["command"] = "secure_open" + post_signal(signal) + signal = new + signal.data["tag"] = exterior_door_tag + signal.data["command"] = "secure_open" + post_signal(signal) + if("force_exterior") + target_state = AIRLOCK_STATE_OUTOPEN + state = AIRLOCK_STATE_OUTOPEN + var/datum/signal/signal = new + signal.data["tag"] = exterior_door_tag + signal.data["command"] = "secure_open" + post_signal(signal) + if("force_interior") + target_state = AIRLOCK_STATE_INOPEN + state = AIRLOCK_STATE_INOPEN + var/datum/signal/signal = new + signal.data["tag"] = interior_door_tag + signal.data["command"] = "secure_open" + post_signal(signal) + if("close") + target_state = AIRLOCK_STATE_CLOSED + state = AIRLOCK_STATE_CLOSED + var/datum/signal/signal = new + signal.data["tag"] = exterior_door_tag + signal.data["command"] = "secure_close" + post_signal(signal) + signal = new + signal.data["tag"] = interior_door_tag + signal.data["command"] = "secure_close" + post_signal(signal) process() var/process_again = 1 @@ -87,7 +137,7 @@ datum/computer/file/embedded_program/airlock_controller if(AIRLOCK_STATE_PRESSURIZE) if(target_state < state) - if(sensor_pressure >= ONE_ATMOSPHERE*0.95) + if(sensor_pressure >= int_sensor_pressure*0.95) if(memory["interior_status"] == "open") state = AIRLOCK_STATE_INOPEN process_again = 1 @@ -142,7 +192,7 @@ datum/computer/file/embedded_program/airlock_controller post_signal(signal) if(AIRLOCK_STATE_DEPRESSURIZE) - var/target_pressure = ONE_ATMOSPHERE*0.05 + var/target_pressure = ONE_ATMOSPHERE*0.04 if(sanitize_external) target_pressure = ONE_ATMOSPHERE*0.01 @@ -199,6 +249,7 @@ datum/computer/file/embedded_program/airlock_controller post_signal(signal) memory["sensor_pressure"] = sensor_pressure + memory["int_sensor_pressure"] = int_sensor_pressure memory["processing"] = state != target_state //sensor_pressure = null //not sure if we can comment this out. Uncomment in case of problems -rastaf0 @@ -221,6 +272,7 @@ obj/machinery/embedded_controller/radio/airlock_controller var/interior_door_tag var/airpump_tag var/sensor_tag + var/sensor_tag_int var/sanitize_external initialize() @@ -233,6 +285,7 @@ obj/machinery/embedded_controller/radio/airlock_controller new_prog.interior_door_tag = interior_door_tag new_prog.airpump_tag = airpump_tag new_prog.sensor_tag = sensor_tag + new_prog.sensor_tag_int = sensor_tag_int new_prog.sanitize_external = sanitize_external new_prog.master = src @@ -253,12 +306,14 @@ obj/machinery/embedded_controller/radio/airlock_controller var/state = 0 var/sensor_pressure = "----" + var/int_sensor_pressure = "----" var/exterior_status = "----" var/interior_status = "----" var/pump_status = "----" if(program) state = program.state sensor_pressure = program.memory["sensor_pressure"] + int_sensor_pressure = program.memory["int_sensor_pressure"] exterior_status = program.memory["exterior_status"] interior_status = program.memory["interior_status"] pump_status = program.memory["pump_status"] @@ -277,12 +332,20 @@ obj/machinery/embedded_controller/radio/airlock_controller if(AIRLOCK_STATE_OUTOPEN) state_options = {"Cycle to Interior Airlock
Close Exterior Airlock
"} + if(AIRLOCK_STATE_BOTHOPEN) + state_options = "Close Airlocks
" var/output = {"Airlock Control Console
[state_options]
Chamber Pressure: [sensor_pressure] kPa
+Internal Pressure: [int_sensor_pressure] kPa
Exterior Door: [exterior_status]
Interior Door: [interior_status]
Control Pump: [pump_status]
"} + if(program && program.state == AIRLOCK_STATE_CLOSED) + output += {"Force Both Airlocks
+ Force Inner Airlock
+ Force Outer Airlock"} + return output \ No newline at end of file From cea430cc77668bf1b9e1dd57608af202c9360996 Mon Sep 17 00:00:00 2001 From: Ater Ignis Date: Sun, 11 Nov 2012 03:30:03 +0400 Subject: [PATCH 2/2] Adds high_volume vents Can be used in place of airtank in station airlocks - vents don't depend on tank storage, and do pressure equalisation faster a bit --- code/ATMOSPHERICS/pipes.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 4b4b3761a3..cbff1f1b64 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -526,10 +526,14 @@ obj/machinery/atmospherics/pipe var/build_killswitch = 1 var/obj/machinery/atmospherics/node1 - New() + New() initialize_directions = dir ..() + high_volume + name = "Larger vent" + volume = 1000 + process() if(!parent) if(build_killswitch <= 0) @@ -539,7 +543,7 @@ obj/machinery/atmospherics/pipe ..() return else - parent.mingle_with_turf(loc, 250) + parent.mingle_with_turf(loc, volume) /* if(!node1) if(!nodealert)