diff --git a/baystation12.dme b/baystation12.dme index bcc2959d8f..a0c36c62e3 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -982,6 +982,7 @@ #include "code\WorkInProgress\explosion_particles.dm" #include "code\WorkInProgress\mapload\dmm_suite.dm" #include "code\WorkInProgress\mapload\reader.dm" +#include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Mini\customitems.dm" #include "code\WorkInProgress\SkyMarshal\coatrack.dm" #include "code\WorkInProgress\SkyMarshal\eraser.dm" diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm new file mode 100644 index 0000000000..018b8d76df --- /dev/null +++ b/code/WorkInProgress/Mini/atmos_control.dm @@ -0,0 +1,315 @@ +/obj/item/weapon/circuitboard/atmoscontrol + name = "Central Atmospherics Computer Circuitboard" + build_path = "/obj/machinery/computer/security/atmoscontrol" + +/obj/machinery/computer/atmoscontrol + name = "Central Atmospherics Computer" + density = 1 + anchored = 1.0 + icon_state = "operating" + circuit = "/obj/item/weapon/circuitboard/atmoscontrol" + var/obj/machinery/alarm/current = "" + +/obj/machinery/computer/atmoscontrol/attack_hand(mob/user) + if(..()) + return + user.machine = src + var/dat = "Main Menu
" + if(current) + dat += src.specific() + else + for(var/obj/machinery/alarm/alarm in world) + dat += "[alarm]
" + user << browse(dat, "window=atmoscontrol") + +/obj/machinery/computer/atmoscontrol/proc/specific() + if(!current) + return "" + var/dat = current.return_status() + if(current.remote_control) + dat += "
[src.return_controls()]" + return dat + +//a bunch of this is copied from atmos alarms +/obj/machinery/computer/atmoscontrol/Topic(href, href_list) + if(..()) + return + if(href_list["reset"]) + current = null + src.updateUsrDialog() + if(href_list["alarm"]) + current = locate(href_list["alarm"]) + if(href_list["command"]) + var/device_id = href_list["id_tag"] + switch(href_list["command"]) + if( + "power", + "adjust_external_pressure", + "checks", + "co2_scrub", + "tox_scrub", + "n2o_scrub", + "panic_siphon", + "scrubbing" + ) + current.send_signal(device_id, list (href_list["command"] = text2num(href_list["val"]))) + spawn(3) + src.updateUsrDialog() + //if("adjust_threshold") //was a good idea but required very wide window + if("set_threshold") + var/env = href_list["env"] + var/varname = href_list["var"] + var/datum/tlv/tlv = current.TLV[env] + var/newval = input("Enter [varname] for env", "Alarm triggers", tlv.vars[varname]) as num|null + if (isnull(newval) || ..() || (current.locked && issilicon(usr))) + return + if (newval<0) + tlv.vars[varname] = -1.0 + else if (env=="temperature" && newval>5000) + tlv.vars[varname] = 5000 + else if (env=="pressure" && newval>50*ONE_ATMOSPHERE) + tlv.vars[varname] = 50*ONE_ATMOSPHERE + else if (env!="temperature" && env!="pressure" && newval>200) + tlv.vars[varname] = 200 + else + newval = round(newval,0.01) + tlv.vars[varname] = newval + spawn(1) + src.updateUsrDialog() + return + + if(href_list["screen"]) + current.screen = text2num(href_list["screen"]) + spawn(1) + src.updateUsrDialog() + return + + + if(href_list["atmos_alarm"]) + if (current.alarm_area.atmosalert(2)) + current.post_alert(2) + spawn(1) + src.updateUsrDialog() + current.update_icon() + return + if(href_list["atmos_reset"]) + if (current.alarm_area.atmosalert(0)) + current.post_alert(0) + spawn(1) + src.updateUsrDialog() + current.update_icon() + return + + if(href_list["mode"]) + current.mode = text2num(href_list["mode"]) + current.apply_mode() + spawn(5) + src.updateUsrDialog() + return + src.updateUsrDialog() + +//copypasta from alarm code, changed to work with this without derping hard +//---START COPYPASTA---- +#define AALARM_MODE_SCRUBBING 1 +#define AALARM_MODE_VENTING 2 //makes draught +#define AALARM_MODE_PANIC 3 //constantly sucks all air +#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing +#define AALARM_MODE_OFF 5 + +#define AALARM_SCREEN_MAIN 1 +#define AALARM_SCREEN_VENT 2 +#define AALARM_SCREEN_SCRUB 3 +#define AALARM_SCREEN_MODE 4 +#define AALARM_SCREEN_SENSORS 5 + +/obj/machinery/computer/atmoscontrol/proc/return_controls() + var/output = ""//"[alarm_zone] Air [name]
" + + switch(current.screen) + if (AALARM_SCREEN_MAIN) + if(current.alarm_area.atmosalm) + output += {"Reset - Atmospheric Alarm
"} + else + output += {"Activate - Atmospheric Alarm
"} + + output += {" +Scrubbers Control
+Vents Control
+Set envirenomentals mode
+Sensor Control
+
+"} + if (current.mode==AALARM_MODE_PANIC) + output += "PANIC SYPHON ACTIVE
turn syphoning off" + else + output += "ACTIVATE PANIC SYPHON IN AREA" + if (AALARM_SCREEN_VENT) + var/sensor_data = "" + if(current.alarm_area.air_vent_names.len) + for(var/id_tag in current.alarm_area.air_vent_names) + var/long_name = current.alarm_area.air_vent_names[id_tag] + var/list/data = current.alarm_area.air_vent_info[id_tag] + var/state = "" + if(!data) + state = " can not be found!" + data = list("external" = 0) //for "0" instead of empty string + else if (data["timestamp"]+AALARM_REPORT_TIMEOUT < world.time) + state = " not responding!" + sensor_data += {" +[long_name][state]
+Operating: +[data["power"]?"on":"off"] +
+Pressure checks: +external +internal +
+External pressure bound: +- +- +- +- +[data["external"]] ++ ++ ++ ++ +
+"} + if (data["direction"] == "siphon") + sensor_data += {" +Direction: +siphoning +
+"} + sensor_data += {"
"} + else + sensor_data = "No vents connected.
" + output = {"Main menu
[sensor_data]"} + if (AALARM_SCREEN_SCRUB) + var/sensor_data = "" + if(current.alarm_area.air_scrub_names.len) + for(var/id_tag in current.alarm_area.air_scrub_names) + var/long_name = current.alarm_area.air_scrub_names[id_tag] + var/list/data = current.alarm_area.air_scrub_info[id_tag] + var/state = "" + if(!data) + state = " can not be found!" + data = list("external" = 0) //for "0" instead of empty string + else if (data["timestamp"]+AALARM_REPORT_TIMEOUT < world.time) + state = " not responding!" + + sensor_data += {" +[long_name][state]
+Operating: +[data["power"]?"on":"off"]
+Type: +[data["scrubbing"]?"scrubbing":"syphoning"]
+"} + + if(data["scrubbing"]) + sensor_data += {" +Filtering: +Carbon Dioxide +[data["filter_co2"]?"on":"off"]; +Toxins +[data["filter_toxins"]?"on":"off"]; +Nitrous Oxide +[data["filter_n2o"]?"on":"off"] +
+"} + sensor_data += {" +Panic syphon: [data["panic"]?"PANIC SYPHON ACTIVATED":""] +Dea":"red'>A")]ctivate
+
+"} + else + sensor_data = "No scrubbers connected.
" + output = {"Main menu
[sensor_data]"} + + if (AALARM_SCREEN_MODE) + output += {" +Main menu
+Air machinery mode for the area:" + if (AALARM_SCREEN_SENSORS) + output += {" +Main menu
+Alarm thresholds:
+Partial pressure for gases + + + +"} + var/list/gases = list( + "oxygen" = "O2", + "carbon dioxide" = "CO2", + "plasma" = "Toxin", + "other" = "Other", + ) + var/list/thresholds = list("min2", "min1", "max1", "max2") + var/datum/tlv/tlv + for (var/g in gases) + output += {" + +"} + tlv = current.TLV[g] + for (var/v in thresholds) + output += {" + +"} + output += {" + +"} + tlv = current.TLV["pressure"] + output += {" + +"} + for (var/v in thresholds) + output += {" + +"} + output += {" + +"} + tlv = current.TLV["temperature"] + output += {" + +"} + for (var/v in thresholds) + output += {" + +"} + output += {" + +"} + output += {"
min2min1max1max2
[gases[g]] +[tlv.vars[v]>=0?tlv.vars[v]:"OFF"] +
Pressure +[tlv.vars[v]>=0?tlv.vars[v]:"OFF"] +
Temperature +[tlv.vars[v]>=0?tlv.vars[v]:"OFF"] +
"} + + return output +//---END COPYPASTA---- diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 54b0d88ce5..f022e1ec89 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -40,6 +40,7 @@ var/frequency = 1439 //var/skipprocess = 0 //Experimenting var/alarm_frequency = 1437 + var/remote_control = 0 #define AALARM_REPORT_TIMEOUT 100 var/datum/radio_frequency/radio_connection var/locked = 1 @@ -211,9 +212,9 @@ /obj/machinery/alarm/proc/return_text() if(!(istype(usr, /mob/living/silicon)) && locked) - return "[src][return_status()]
(Swipe ID card to unlock interface)" + return "[src][return_status()]
[remote_control ? "Disable" : "Enable"] Remote Control
(Swipe ID card to unlock interface)" else - return "[src][return_status()]
[return_controls()]" + return "[src][return_status()]
[remote_control ? "Disable" : "Enable"] Remote Control
[return_controls()]" /obj/machinery/alarm/proc/return_status() var/turf/location = src.loc @@ -491,7 +492,9 @@ table tr:first-child th:first-child { border: none;} /obj/machinery/alarm/Topic(href, href_list) if(..()) return - + if(href_list["ctrl"]) + remote_control = !remote_control + src.updateUsrDialog() if(href_list["command"]) var/device_id = href_list["id_tag"] switch(href_list["command"]) @@ -554,7 +557,6 @@ table tr:first-child th:first-child { border: none;} apply_mode() spawn(5) src.updateUsrDialog() - return /obj/machinery/alarm/proc/apply_mode()