diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3a19bc34edf..ccd774cdaa8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -21,8 +21,8 @@ rust_g.dll @AffectedArc07 ### Fox-McCloud -/code/ATMOSPHERICS/ @Fox-McCloud /code/controllers/subsystem/air.dm @Fox-McCloud /code/controllers/subsystem/garbage.dm @Fox-McCloud +/code/modules/atmospherics/ @Fox-McCloud /code/modules/reagents/chemistry/holder.dm @Fox-McCloud /code/modules/reagents/chemistry/reagents.dm @Fox-McCloud diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm deleted file mode 100644 index 93ecea71fa8..00000000000 --- a/code/game/machinery/atmo_control.dm +++ /dev/null @@ -1,741 +0,0 @@ -/obj/machinery/air_sensor - icon = 'icons/obj/stationobjs.dmi' - icon_state = "gsensor1" - resistance_flags = FIRE_PROOF - name = "gas sensor" - req_one_access_txt = "24;10" - - anchored = 1 - var/state = 0 - var/bolts = 1 - - var/id_tag - frequency = ATMOS_VENTSCRUB - Mtoollink = 1 - settagwhitelist = list("id_tag") - - var/on = 1 - var/output = 3 - //Flags: - // 1 for pressure - // 2 for temperature - // Output >= 4 includes gas composition - // 4 for oxygen concentration - // 8 for toxins concentration - // 16 for nitrogen concentration - // 32 for carbon dioxide concentration - -/obj/machinery/air_sensor/update_icon() - icon_state = "gsensor[on]" - -/obj/machinery/air_sensor/multitool_menu(var/mob/user, var/obj/item/multitool/P) - return {" - Main - "} - -/obj/machinery/air_sensor/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) - . = ..() - if(.) - return . - - if("toggle_out_flag" in href_list) - var/bitflag_value = text2num(href_list["toggle_out_flag"])//this is a string normally - if(!(bitflag_value in list(1, 2, 4, 8, 16, 32))) //Here to prevent breaking the sensors with HREF exploits - return 0 - if(output&bitflag_value)//the bitflag is on ATM - output &= ~bitflag_value - else//can't not be off - output |= bitflag_value - return TRUE - if("toggle_bolts" in href_list) - bolts = !bolts - if(bolts) - visible_message("You hear a quite click as the [src] bolts to the floor", "You hear a quite click") - else - visible_message("You hear a quite click as the [src]'s floor bolts raise", "You hear a quite click") - return TRUE - -/obj/machinery/air_sensor/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(istype(W, /obj/item/multitool)) - update_multitool_menu(user) - return 1 - if(istype(W, /obj/item/wrench)) - if(bolts) - to_chat(usr, "The [src] is bolted to the floor! You can't detach it like this.") - return 1 - playsound(loc, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if(do_after(user, 40 * W.toolspeed, target = src)) - user.visible_message("[user] unfastens \the [src].", "You have unfastened \the [src].", "You hear ratchet.") - new /obj/item/pipe_gsensor(src.loc) - qdel(src) - return 1 - return - return ..() - -/obj/machinery/air_sensor/process_atmos() - if(on) - if(!radio_connection) - return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - - var/datum/gas_mixture/air_sample = return_air() - - if(output&1) - signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1),) - if(output&2) - signal.data["temperature"] = round(air_sample.temperature,0.1) - - if(output>4) - var/total_moles = air_sample.total_moles() - if(total_moles > 0) - if(output&4) - signal.data["oxygen"] = round(100*air_sample.oxygen/total_moles,0.1) - if(output&8) - signal.data["toxins"] = round(100*air_sample.toxins/total_moles,0.1) - if(output&16) - signal.data["nitrogen"] = round(100*air_sample.nitrogen/total_moles,0.1) - if(output&32) - signal.data["carbon_dioxide"] = round(100*air_sample.carbon_dioxide/total_moles,0.1) - else - signal.data["oxygen"] = 0 - signal.data["toxins"] = 0 - signal.data["nitrogen"] = 0 - signal.data["carbon_dioxide"] = 0 - signal.data["sigtype"]="status" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - -/obj/machinery/air_sensor/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/air_sensor/Initialize() - ..() - SSair.atmos_machinery += src - set_frequency(frequency) - -/obj/machinery/air_sensor/Destroy() - SSair.atmos_machinery -= src - if(SSradio) - SSradio.remove_object(src, frequency) - radio_connection = null - return ..() - - -/obj/machinery/computer/general_air_control - icon = 'icons/obj/computer.dmi' - icon_screen = "tank" - icon_keyboard = "atmos_key" - circuit = /obj/item/circuitboard/air_management - req_one_access_txt = "24;10" - - name = "Computer" - - frequency = ATMOS_VENTSCRUB - var/show_sensors=1 - var/list/sensors = list() - Mtoollink = 1 - - var/list/sensor_information = list() - -/obj/machinery/computer/general_air_control/Destroy() - if(SSradio) - SSradio.remove_object(src, frequency) - radio_connection = null - return ..() - -/obj/machinery/computer/general_air_control/attack_hand(mob/user) - if(..(user)) - return - var/html=return_text() - var/datum/browser/popup = new(user, "gac", name, 400, 400) - popup.set_content(html) - popup.open(0) - user.set_machine(src) - onclose(user, "gac") - -/obj/machinery/computer/general_air_control/process() - ..() - if(!sensors) - //warning("[src.type] at [x],[y],[z] has null sensors. Please fix.")//commenting this line out because the admins will get a warning like this every time somebody builds another GAC - sensors = list() - src.updateUsrDialog() - -/obj/machinery/computer/general_air_control/attackby(I as obj, user as mob, params) - if(istype(I, /obj/item/multitool)) - update_multitool_menu(user) - return 1 - return ..() - - -/obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/id_tag = signal.data["tag"] - if(!id_tag || !sensors || !sensors.Find(id_tag)) return - - sensor_information[id_tag] = signal.data - -/obj/machinery/computer/general_air_control/proc/return_text() - var/sensor_data - if(show_sensors) - if(sensors.len) - for(var/id_tag in sensors) - var/long_name = sensors[id_tag] - var/list/data = sensor_information[id_tag] - var/sensor_part = "
[long_name]" - - if(data) - sensor_part += "" - if(data["pressure"]) - sensor_part += "" - if(data["temperature"]) - sensor_part += "" - if(data["oxygen"]||data["toxins"]||data["nitrogen"]||data["carbon_dioxide"]) - sensor_part += "" - sensor_part += "
Pressure:[data["pressure"]] kPa
Temperature:[data["temperature"]] K
Gas Composition :
    " - if(data["oxygen"]) - sensor_part += "
  • [data["oxygen"]]% O2
  • " - if(data["nitrogen"]) - sensor_part += "
  • [data["nitrogen"]]% N
  • " - if(data["carbon_dioxide"]) - sensor_part += "
  • [data["carbon_dioxide"]]% CO2
  • " - if(data["toxins"]) - sensor_part += "
  • [data["toxins"]]% Plasma
  • " - sensor_part += "
" - - else - sensor_part += "[long_name] can not be found!
" - sensor_part += "
" - sensor_data += sensor_part - - else - sensor_data = "No sensors connected." - - var/output = {" - - [show_sensors ? "

Sensor Data:

" + sensor_data : ""] - "} - - return output - -/obj/machinery/computer/general_air_control/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/machinery/computer/general_air_control/Initialize() - ..() - set_frequency(frequency) - -/obj/machinery/computer/general_air_control/multitool_menu(mob/user, obj/item/multitool/P) - var/dat= {" - Main - - Sensors: - "} - return dat - -/obj/machinery/computer/general_air_control/multitool_topic(mob/user,list/href_list,obj/O) - . = ..() - if(.) return . - if("add_sensor" in href_list) - - // Make a list of all available sensors on the same frequency - var/list/sensor_list = list() - for(var/obj/machinery/air_sensor/G in GLOB.machines) - if(!isnull(G.id_tag) && G.frequency == frequency) - sensor_list|=G.id_tag - if(!sensor_list.len) - to_chat(user, "No sensors on this frequency.") - return FALSE - - // Have the user pick one of them and name its label - var/sensor = input(user, "Select a sensor:", "Sensor Data") as null|anything in sensor_list - if(!sensor) - return FALSE - var/label = reject_bad_name( input(user, "Choose a sensor label:", "Sensor Label") as text|null, allow_numbers=1) - if(!label) - return FALSE - - // Add the sensor's information to general_air_controler - sensors[sensor] = label - return TRUE - - if("edit_sensor" in href_list) - var/list/sensor_list = list() - for(var/obj/machinery/air_sensor/G in GLOB.machines) - if(!isnull(G.id_tag) && G.frequency == frequency) - sensor_list|=G.id_tag - if(!sensor_list.len) - to_chat(user, "No sensors on this frequency.") - return FALSE - var/label = sensors[href_list["edit_sensor"]] - var/sensor = input(user, "Select a sensor:", "Sensor Data", href_list["edit_sensor"]) as null|anything in sensor_list - if(!sensor) - return FALSE - sensors.Remove(href_list["edit_sensor"]) - sensors[sensor] = label - return TRUE - -/obj/machinery/computer/general_air_control/unlinkFrom(mob/user, obj/O) - ..() - if("id_tag" in O.vars && (istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter))) - sensors.Remove(O:id_tag) - return 1 - return 0 - -/obj/machinery/computer/general_air_control/linkMenu(obj/O) - if(isLinkedWith(O)) - return - - var/dat="" - - if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter)) - dat += " \[New Sensor\] " - return dat - -/obj/machinery/computer/general_air_control/canLink(obj/O, list/context) - if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter)) - return O:id_tag - -/obj/machinery/computer/general_air_control/isLinkedWith(obj/O) - if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter)) - return O:id_tag in sensors - -/obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, context) - sensors[O:id_tag] = reject_bad_name(clean_input(user, "Choose a sensor label:", "Sensor Label"), allow_numbers=1) - return 1 - -/obj/machinery/computer/general_air_control/large_tank_control - circuit = /obj/item/circuitboard/large_tank_control - req_one_access_txt = "24;10" - settagwhitelist = list("input_tag", "output_tag") - - var/input_tag - var/output_tag - - var/list/input_info - var/list/output_info - - var/list/input_linkable=list( - /obj/machinery/atmospherics/unary/outlet_injector, - /obj/machinery/atmospherics/unary/vent_pump - ) - - var/list/output_linkable=list( - /obj/machinery/atmospherics/unary/vent_pump - ) - - var/pressure_setting = ONE_ATMOSPHERE * 45 - -/obj/machinery/computer/general_air_control/large_tank_control/attackby(I as obj, user as mob) - if(istype(I, /obj/item/multitool)) - update_multitool_menu(user) - return 1 - return ..() - - -/obj/machinery/computer/general_air_control/large_tank_control/multitool_menu(mob/user, obj/item/multitool/P) - var/dat= {" - - Sensors: - "} - return dat - - -/obj/machinery/computer/general_air_control/large_tank_control/linkWith(mob/user, obj/machinery/atmospherics/unary/O, list/context) - if(!is_type_in_list(O, input_linkable)) - return FALSE - - if(context["slot"] == "input") - input_tag = O.id_tag - input_info = null - if(istype(O, /obj/machinery/atmospherics/unary/vent_pump)) - send_signal(list("tag" = input_tag, - "direction" = 1, // Release - "checks" = 0 // No pressure checks. - )) - return TRUE - - if(context["slot"] == "output") - output_tag = O.id_tag - output_info = null - if(istype(O, /obj/machinery/atmospherics/unary/vent_pump)) - send_signal(list("tag" = output_tag, - "direction" = 0, // Siphon - "checks" = 2 // Internal pressure checks. - )) - return TRUE - -/obj/machinery/computer/general_air_control/large_tank_control/unlinkFrom(mob/user, obj/O) - if("id_tag" in O.vars) - if(O:id_tag == input_tag) - input_tag=null - input_info=null - return 1 - if(O:id_tag == output_tag) - output_tag=null - output_info=null - return 1 - return 0 - -/obj/machinery/computer/general_air_control/large_tank_control/linkMenu(obj/O) - var/dat="" - if(canLink(O,list("slot"="input"))) - dat += " \[Link @ Input\] " - if(canLink(O,list("slot"="output"))) - dat += " \[Link @ Output\] " - return dat - -/obj/machinery/computer/general_air_control/large_tank_control/canLink(obj/O, list/context) - return (context["slot"]=="input" && is_type_in_list(O,input_linkable)) || (context["slot"]=="output" && is_type_in_list(O,output_linkable)) - -/obj/machinery/computer/general_air_control/large_tank_control/isLinkedWith(obj/O) - if(O:id_tag == input_tag) - return 1 - if(O:id_tag == output_tag) - return 1 - return 0 - -/obj/machinery/computer/general_air_control/large_tank_control/process() - ..() - if(!input_info && input_tag) - request_device_refresh(input_tag) - if(!output_info && output_tag) - request_device_refresh(output_tag) - -/obj/machinery/computer/general_air_control/large_tank_control/return_text() - var/output = ..() - //if(signal.data) - // input_info = signal.data // Attempting to fix intake control -- TLE - - output += "

Tank Control System


" - if(input_tag) - if(input_info) - var/power = (input_info["power"]) - var/volume_rate = input_info["volume_rate"] - output += {" -
- Input (Refresh) - - - - - - - - - -
State:[power?("Injecting"):("On Hold")]
Rate:[volume_rate] L/sec
-
-"} - else - output += "ERROR: Can not find input port Search
" - if(output_tag) - if(output_info) - var/power = (output_info["power"]) - var/output_pressure = output_info["internal"] - output += {" -
- Output (Refresh) - - - - - - - - - -
State:[power?("Open"):("On Hold")]
Max Output Pressure:[output_pressure] kPa
-
-"} - else - output += "ERROR: Can not find output port Search
" - - return output - -/obj/machinery/computer/general_air_control/large_tank_control/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/id_tag = signal.data["tag"] - - if(input_tag == id_tag) - input_info = signal.data - updateUsrDialog() - else if(output_tag == id_tag) - output_info = signal.data - updateUsrDialog() - else - ..(signal) - -/obj/machinery/computer/general_air_control/large_tank_control/proc/request_device_refresh(device) - send_signal(list("tag"=device, "status")) - -/obj/machinery/computer/general_air_control/large_tank_control/proc/send_signal(list/data) - if(!radio_connection) - return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - signal.data=data - signal.data["sigtype"]="command" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - -/obj/machinery/computer/general_air_control/large_tank_control/Topic(href, href_list) - if(..()) - return 1 - - add_fingerprint(usr) - - if(href_list["out_set_pressure"]) - var/response=input(usr,"Set new pressure, in kPa. \[0-[50*ONE_ATMOSPHERE]\]") as num - pressure_setting = text2num(response) - pressure_setting = between(0, pressure_setting, 50*ONE_ATMOSPHERE) - - if(!radio_connection) - return 0 - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - if(href_list["in_refresh_status"]) - input_info = null - signal.data = list ("tag" = input_tag, "status" = 1) - - else if(href_list["in_toggle_injector"]) - input_info = null - signal.data = list ("tag" = input_tag, "power_toggle" = 1) - - else if(href_list["out_refresh_status"]) - output_info = null - signal.data = list ("tag" = output_tag, "status" = 1) - - else if(href_list["out_toggle_power"]) - output_info = null - signal.data = list ("tag" = output_tag, "power_toggle" = 1) - - else if(href_list["out_set_pressure"]) - output_info = null - signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]") - /*else - testing("Bad Topic() to GAC \"[src.name]\": [href]") - return*/ // NOPE. // disabling because it spams when multitool menus are used - - signal.data["sigtype"] = "command" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - src.updateUsrDialog() - -/obj/machinery/computer/general_air_control/fuel_injection - icon = 'icons/obj/computer.dmi' - icon_screen = "atmos" - circuit = /obj/item/circuitboard/injector_control - - var/device_tag - var/list/device_info - - var/automation = 0 - - var/cutoff_temperature = 2000 - var/on_temperature = 1200 - -/obj/machinery/computer/general_air_control/fuel_injection/attackby(I as obj, user as mob, params) - if(istype(I, /obj/item/multitool)) - update_multitool_menu(user) - return 1 - return ..() - -/obj/machinery/computer/general_air_control/fuel_injection/process() - if(automation) - if(!radio_connection) - return 0 - - var/injecting = 0 - for(var/id_tag in sensor_information) - var/list/data = sensor_information[id_tag] - if(data["temperature"]) - if(data["temperature"] >= cutoff_temperature) - injecting = 0 - break - if(data["temperature"] <= on_temperature) - injecting = 1 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( - "tag" = device_tag, - "power" = injecting, - "sigtype"="command" - ) - - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - - ..() - -/obj/machinery/computer/general_air_control/fuel_injection/return_text() - var/output = ..() - output += "
Fuel Injection System (Refresh)" - if(device_info) - var/power = device_info["power"] - var/volume_rate = device_info["volume_rate"] - output += {" - - - - - - - - - - - - "} - - if(automation) - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\game\machinery\atmo_control.dm:372: output += "Automated Fuel Injection: Engaged
" - output += {" - - - "} - // END AUTOFIX - else - - // AUTOFIXED BY fix_string_idiocy.py - // C:\Users\Rob\Documents\Projects\vgstation13\code\game\machinery\atmo_control.dm:375: output += "Automated Fuel Injection: Disengaged
" - output += {" - - - - "} - // END AUTOFIX - output += "
Status:[power?"Injecting":"On Hold"]
Rate:[volume_rate] L/sec
Automated Fuel Injection:[automation?"Engaged":"Disengaged"]
Injector Controls Locked Out
Injector:Toggle Power Inject (1 Cycle)
" - else - output += {"

ERROR: Can not find device. Search

"} - output += "
" - - return output - -/obj/machinery/computer/general_air_control/fuel_injection/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/id_tag = signal.data["tag"] - - if(device_tag == id_tag) - device_info = signal.data - else - ..(signal) - -/obj/machinery/computer/general_air_control/fuel_injection/Topic(href, href_list) - if(..()) - return - - if(href_list["refresh_status"]) - device_info = null - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "status", - "sigtype"="command" - ) - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - - if(href_list["toggle_automation"]) - automation = !automation - - if(href_list["toggle_injector"]) - device_info = null - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "power_toggle", - "sigtype"="command" - ) - - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - - if(href_list["injection"]) - if(!radio_connection) - return 0 - - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - signal.data = list( - "tag" = device_tag, - "inject", - "sigtype"="command" - ) - - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) diff --git a/code/game/machinery/atmoalter/zvent.dm b/code/game/machinery/atmoalter/zvent.dm deleted file mode 100644 index 773432133e8..00000000000 --- a/code/game/machinery/atmoalter/zvent.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/machinery/zvent - name = "Interfloor Air Transfer System" - - icon = 'icons/obj/pipes.dmi' - icon_state = "vent-db" - density = 0 - anchored=1 - - var/on = 0 - var/volume_rate = 800 - -/obj/machinery/zvent/New() - ..() - SSair.atmos_machinery += src - -/obj/machinery/zvent/Destroy() - SSair.atmos_machinery -= src - return ..() - -/obj/machinery/zvent/process_atmos() - - //all this object does, is make its turf share air with the ones above and below it, if they have a vent too. - if(istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it - for(var/new_z in list(-1,1)) //change this list if a fancier system of z-levels gets implemented - var/turf/simulated/zturf_conn = locate(x,y,z+new_z) - if(istype(zturf_conn)) - var/obj/machinery/zvent/zvent_conn= locate(/obj/machinery/zvent) in zturf_conn - if(istype(zvent_conn)) - //both floors have simulated turfs, share() - var/turf/simulated/myturf = loc - var/datum/gas_mixture/conn_air = zturf_conn.air //TODO: pop culture reference - var/datum/gas_mixture/my_air = myturf.air - if(istype(conn_air) && istype(my_air)) - my_air.share(conn_air) - air_update_turf() diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 7083986242f..a5898d87a4c 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -1,3 +1,745 @@ +/obj/machinery/air_sensor + icon = 'icons/obj/stationobjs.dmi' + icon_state = "gsensor1" + resistance_flags = FIRE_PROOF + name = "gas sensor" + req_one_access_txt = "24;10" + + anchored = 1 + var/state = 0 + var/bolts = 1 + + var/id_tag + frequency = ATMOS_VENTSCRUB + Mtoollink = 1 + settagwhitelist = list("id_tag") + + var/on = 1 + var/output = 3 + //Flags: + // 1 for pressure + // 2 for temperature + // Output >= 4 includes gas composition + // 4 for oxygen concentration + // 8 for toxins concentration + // 16 for nitrogen concentration + // 32 for carbon dioxide concentration + +/obj/machinery/air_sensor/update_icon() + icon_state = "gsensor[on]" + +/obj/machinery/air_sensor/multitool_menu(var/mob/user, var/obj/item/multitool/P) + return {" + Main + "} + +/obj/machinery/air_sensor/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) + . = ..() + if(.) + return . + + if("toggle_out_flag" in href_list) + var/bitflag_value = text2num(href_list["toggle_out_flag"])//this is a string normally + if(!(bitflag_value in list(1, 2, 4, 8, 16, 32))) //Here to prevent breaking the sensors with HREF exploits + return 0 + if(output&bitflag_value)//the bitflag is on ATM + output &= ~bitflag_value + else//can't not be off + output |= bitflag_value + return TRUE + if("toggle_bolts" in href_list) + bolts = !bolts + if(bolts) + visible_message("You hear a quite click as the [src] bolts to the floor", "You hear a quite click") + else + visible_message("You hear a quite click as the [src]'s floor bolts raise", "You hear a quite click") + return TRUE + +/obj/machinery/air_sensor/attackby(var/obj/item/W as obj, var/mob/user as mob) + if(istype(W, /obj/item/multitool)) + update_multitool_menu(user) + return 1 + if(istype(W, /obj/item/wrench)) + if(bolts) + to_chat(usr, "The [src] is bolted to the floor! You can't detach it like this.") + return 1 + playsound(loc, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if(do_after(user, 40 * W.toolspeed, target = src)) + user.visible_message("[user] unfastens \the [src].", "You have unfastened \the [src].", "You hear ratchet.") + new /obj/item/pipe_gsensor(src.loc) + qdel(src) + return 1 + return + return ..() + +/obj/machinery/air_sensor/process_atmos() + if(on) + if(!radio_connection) + return + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.data["tag"] = id_tag + signal.data["timestamp"] = world.time + + var/datum/gas_mixture/air_sample = return_air() + + if(output&1) + signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1),) + if(output&2) + signal.data["temperature"] = round(air_sample.temperature,0.1) + + if(output>4) + var/total_moles = air_sample.total_moles() + if(total_moles > 0) + if(output&4) + signal.data["oxygen"] = round(100*air_sample.oxygen/total_moles,0.1) + if(output&8) + signal.data["toxins"] = round(100*air_sample.toxins/total_moles,0.1) + if(output&16) + signal.data["nitrogen"] = round(100*air_sample.nitrogen/total_moles,0.1) + if(output&32) + signal.data["carbon_dioxide"] = round(100*air_sample.carbon_dioxide/total_moles,0.1) + else + signal.data["oxygen"] = 0 + signal.data["toxins"] = 0 + signal.data["nitrogen"] = 0 + signal.data["carbon_dioxide"] = 0 + signal.data["sigtype"]="status" + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + +/obj/machinery/air_sensor/set_frequency(new_frequency) + SSradio.remove_object(src, frequency) + frequency = new_frequency + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) + +/obj/machinery/air_sensor/Initialize() + ..() + SSair.atmos_machinery += src + set_frequency(frequency) + +/obj/machinery/air_sensor/Destroy() + SSair.atmos_machinery -= src + if(SSradio) + SSradio.remove_object(src, frequency) + radio_connection = null + return ..() + + +/obj/machinery/computer/general_air_control + icon = 'icons/obj/computer.dmi' + icon_screen = "tank" + icon_keyboard = "atmos_key" + circuit = /obj/item/circuitboard/air_management + req_one_access_txt = "24;10" + + name = "Computer" + + frequency = ATMOS_VENTSCRUB + var/show_sensors=1 + var/list/sensors = list() + Mtoollink = 1 + + var/list/sensor_information = list() + +/obj/machinery/computer/general_air_control/Destroy() + if(SSradio) + SSradio.remove_object(src, frequency) + radio_connection = null + return ..() + +/obj/machinery/computer/general_air_control/attack_hand(mob/user) + if(..(user)) + return + var/html=return_text() + var/datum/browser/popup = new(user, "gac", name, 400, 400) + popup.set_content(html) + popup.open(0) + user.set_machine(src) + onclose(user, "gac") + +/obj/machinery/computer/general_air_control/process() + ..() + if(!sensors) + //warning("[src.type] at [x],[y],[z] has null sensors. Please fix.")//commenting this line out because the admins will get a warning like this every time somebody builds another GAC + sensors = list() + src.updateUsrDialog() + +/obj/machinery/computer/general_air_control/attackby(I as obj, user as mob, params) + if(istype(I, /obj/item/multitool)) + update_multitool_menu(user) + return 1 + return ..() + + +/obj/machinery/computer/general_air_control/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) return + + var/id_tag = signal.data["tag"] + if(!id_tag || !sensors || !sensors.Find(id_tag)) return + + sensor_information[id_tag] = signal.data + +/obj/machinery/computer/general_air_control/proc/return_text() + var/sensor_data + if(show_sensors) + if(sensors.len) + for(var/id_tag in sensors) + var/long_name = sensors[id_tag] + var/list/data = sensor_information[id_tag] + var/sensor_part = "
[long_name]" + + if(data) + sensor_part += "" + if(data["pressure"]) + sensor_part += "" + if(data["temperature"]) + sensor_part += "" + if(data["oxygen"]||data["toxins"]||data["nitrogen"]||data["carbon_dioxide"]) + sensor_part += "" + sensor_part += "
Pressure:[data["pressure"]] kPa
Temperature:[data["temperature"]] K
Gas Composition :
    " + if(data["oxygen"]) + sensor_part += "
  • [data["oxygen"]]% O2
  • " + if(data["nitrogen"]) + sensor_part += "
  • [data["nitrogen"]]% N
  • " + if(data["carbon_dioxide"]) + sensor_part += "
  • [data["carbon_dioxide"]]% CO2
  • " + if(data["toxins"]) + sensor_part += "
  • [data["toxins"]]% Plasma
  • " + sensor_part += "
" + + else + sensor_part += "[long_name] can not be found!
" + sensor_part += "
" + sensor_data += sensor_part + + else + sensor_data = "No sensors connected." + + var/output = {" + + [show_sensors ? "

Sensor Data:

" + sensor_data : ""] + "} + + return output + +/obj/machinery/computer/general_air_control/set_frequency(new_frequency) + SSradio.remove_object(src, frequency) + frequency = new_frequency + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) + +/obj/machinery/computer/general_air_control/Initialize() + ..() + set_frequency(frequency) + +/obj/machinery/computer/general_air_control/multitool_menu(mob/user, obj/item/multitool/P) + var/dat= {" + Main + + Sensors: + "} + return dat + +/obj/machinery/computer/general_air_control/multitool_topic(mob/user,list/href_list,obj/O) + . = ..() + if(.) return . + if("add_sensor" in href_list) + + // Make a list of all available sensors on the same frequency + var/list/sensor_list = list() + for(var/obj/machinery/air_sensor/G in GLOB.machines) + if(!isnull(G.id_tag) && G.frequency == frequency) + sensor_list|=G.id_tag + if(!sensor_list.len) + to_chat(user, "No sensors on this frequency.") + return FALSE + + // Have the user pick one of them and name its label + var/sensor = input(user, "Select a sensor:", "Sensor Data") as null|anything in sensor_list + if(!sensor) + return FALSE + var/label = reject_bad_name( input(user, "Choose a sensor label:", "Sensor Label") as text|null, allow_numbers=1) + if(!label) + return FALSE + + // Add the sensor's information to general_air_controler + sensors[sensor] = label + return TRUE + + if("edit_sensor" in href_list) + var/list/sensor_list = list() + for(var/obj/machinery/air_sensor/G in GLOB.machines) + if(!isnull(G.id_tag) && G.frequency == frequency) + sensor_list|=G.id_tag + if(!sensor_list.len) + to_chat(user, "No sensors on this frequency.") + return FALSE + var/label = sensors[href_list["edit_sensor"]] + var/sensor = input(user, "Select a sensor:", "Sensor Data", href_list["edit_sensor"]) as null|anything in sensor_list + if(!sensor) + return FALSE + sensors.Remove(href_list["edit_sensor"]) + sensors[sensor] = label + return TRUE + +/obj/machinery/computer/general_air_control/unlinkFrom(mob/user, obj/O) + ..() + if("id_tag" in O.vars && (istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter))) + sensors.Remove(O:id_tag) + return 1 + return 0 + +/obj/machinery/computer/general_air_control/linkMenu(obj/O) + if(isLinkedWith(O)) + return + + var/dat="" + + if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter)) + dat += " \[New Sensor\] " + return dat + +/obj/machinery/computer/general_air_control/canLink(obj/O, list/context) + if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter)) + return O:id_tag + +/obj/machinery/computer/general_air_control/isLinkedWith(obj/O) + if(istype(O,/obj/machinery/air_sensor) || istype(O, /obj/machinery/meter)) + return O:id_tag in sensors + +/obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, context) + sensors[O:id_tag] = reject_bad_name(clean_input(user, "Choose a sensor label:", "Sensor Label"), allow_numbers=1) + return 1 + +/obj/machinery/computer/general_air_control/large_tank_control + circuit = /obj/item/circuitboard/large_tank_control + req_one_access_txt = "24;10" + settagwhitelist = list("input_tag", "output_tag") + + var/input_tag + var/output_tag + + var/list/input_info + var/list/output_info + + var/list/input_linkable=list( + /obj/machinery/atmospherics/unary/outlet_injector, + /obj/machinery/atmospherics/unary/vent_pump + ) + + var/list/output_linkable=list( + /obj/machinery/atmospherics/unary/vent_pump + ) + + var/pressure_setting = ONE_ATMOSPHERE * 45 + +/obj/machinery/computer/general_air_control/large_tank_control/attackby(I as obj, user as mob) + if(istype(I, /obj/item/multitool)) + update_multitool_menu(user) + return 1 + return ..() + + +/obj/machinery/computer/general_air_control/large_tank_control/multitool_menu(mob/user, obj/item/multitool/P) + var/dat= {" + + Sensors: + "} + return dat + + +/obj/machinery/computer/general_air_control/large_tank_control/linkWith(mob/user, obj/machinery/atmospherics/unary/O, list/context) + if(!is_type_in_list(O, input_linkable)) + return FALSE + + if(context["slot"] == "input") + input_tag = O.id_tag + input_info = null + if(istype(O, /obj/machinery/atmospherics/unary/vent_pump)) + send_signal(list("tag" = input_tag, + "direction" = 1, // Release + "checks" = 0 // No pressure checks. + )) + return TRUE + + if(context["slot"] == "output") + output_tag = O.id_tag + output_info = null + if(istype(O, /obj/machinery/atmospherics/unary/vent_pump)) + send_signal(list("tag" = output_tag, + "direction" = 0, // Siphon + "checks" = 2 // Internal pressure checks. + )) + return TRUE + +/obj/machinery/computer/general_air_control/large_tank_control/unlinkFrom(mob/user, obj/O) + if("id_tag" in O.vars) + if(O:id_tag == input_tag) + input_tag=null + input_info=null + return 1 + if(O:id_tag == output_tag) + output_tag=null + output_info=null + return 1 + return 0 + +/obj/machinery/computer/general_air_control/large_tank_control/linkMenu(obj/O) + var/dat="" + if(canLink(O,list("slot"="input"))) + dat += " \[Link @ Input\] " + if(canLink(O,list("slot"="output"))) + dat += " \[Link @ Output\] " + return dat + +/obj/machinery/computer/general_air_control/large_tank_control/canLink(obj/O, list/context) + return (context["slot"]=="input" && is_type_in_list(O,input_linkable)) || (context["slot"]=="output" && is_type_in_list(O,output_linkable)) + +/obj/machinery/computer/general_air_control/large_tank_control/isLinkedWith(obj/O) + if(O:id_tag == input_tag) + return 1 + if(O:id_tag == output_tag) + return 1 + return 0 + +/obj/machinery/computer/general_air_control/large_tank_control/process() + ..() + if(!input_info && input_tag) + request_device_refresh(input_tag) + if(!output_info && output_tag) + request_device_refresh(output_tag) + +/obj/machinery/computer/general_air_control/large_tank_control/return_text() + var/output = ..() + //if(signal.data) + // input_info = signal.data // Attempting to fix intake control -- TLE + + output += "

Tank Control System


" + if(input_tag) + if(input_info) + var/power = (input_info["power"]) + var/volume_rate = input_info["volume_rate"] + output += {" +
+ Input (Refresh) + + + + + + + + + +
State:[power?("Injecting"):("On Hold")]
Rate:[volume_rate] L/sec
+
+"} + else + output += "ERROR: Can not find input port Search
" + if(output_tag) + if(output_info) + var/power = (output_info["power"]) + var/output_pressure = output_info["internal"] + output += {" +
+ Output (Refresh) + + + + + + + + + +
State:[power?("Open"):("On Hold")]
Max Output Pressure:[output_pressure] kPa
+
+"} + else + output += "ERROR: Can not find output port Search
" + + return output + +/obj/machinery/computer/general_air_control/large_tank_control/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) return + + var/id_tag = signal.data["tag"] + + if(input_tag == id_tag) + input_info = signal.data + updateUsrDialog() + else if(output_tag == id_tag) + output_info = signal.data + updateUsrDialog() + else + ..(signal) + +/obj/machinery/computer/general_air_control/large_tank_control/proc/request_device_refresh(device) + send_signal(list("tag"=device, "status")) + +/obj/machinery/computer/general_air_control/large_tank_control/proc/send_signal(list/data) + if(!radio_connection) + return + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + signal.data=data + signal.data["sigtype"]="command" + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + +/obj/machinery/computer/general_air_control/large_tank_control/Topic(href, href_list) + if(..()) + return 1 + + add_fingerprint(usr) + + if(href_list["out_set_pressure"]) + var/response=input(usr,"Set new pressure, in kPa. \[0-[50*ONE_ATMOSPHERE]\]") as num + pressure_setting = text2num(response) + pressure_setting = between(0, pressure_setting, 50*ONE_ATMOSPHERE) + + if(!radio_connection) + return 0 + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + if(href_list["in_refresh_status"]) + input_info = null + signal.data = list ("tag" = input_tag, "status" = 1) + + else if(href_list["in_toggle_injector"]) + input_info = null + signal.data = list ("tag" = input_tag, "power_toggle" = 1) + + else if(href_list["out_refresh_status"]) + output_info = null + signal.data = list ("tag" = output_tag, "status" = 1) + + else if(href_list["out_toggle_power"]) + output_info = null + signal.data = list ("tag" = output_tag, "power_toggle" = 1) + + else if(href_list["out_set_pressure"]) + output_info = null + signal.data = list ("tag" = output_tag, "set_internal_pressure" = "[pressure_setting]") + /*else + testing("Bad Topic() to GAC \"[src.name]\": [href]") + return*/ // NOPE. // disabling because it spams when multitool menus are used + + signal.data["sigtype"] = "command" + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + src.updateUsrDialog() + +/obj/machinery/computer/general_air_control/fuel_injection + icon = 'icons/obj/computer.dmi' + icon_screen = "atmos" + circuit = /obj/item/circuitboard/injector_control + + var/device_tag + var/list/device_info + + var/automation = 0 + + var/cutoff_temperature = 2000 + var/on_temperature = 1200 + +/obj/machinery/computer/general_air_control/fuel_injection/attackby(I as obj, user as mob, params) + if(istype(I, /obj/item/multitool)) + update_multitool_menu(user) + return 1 + return ..() + +/obj/machinery/computer/general_air_control/fuel_injection/process() + if(automation) + if(!radio_connection) + return 0 + + var/injecting = 0 + for(var/id_tag in sensor_information) + var/list/data = sensor_information[id_tag] + if(data["temperature"]) + if(data["temperature"] >= cutoff_temperature) + injecting = 0 + break + if(data["temperature"] <= on_temperature) + injecting = 1 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + + signal.data = list( + "tag" = device_tag, + "power" = injecting, + "sigtype"="command" + ) + + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + + ..() + +/obj/machinery/computer/general_air_control/fuel_injection/return_text() + var/output = ..() + output += "
Fuel Injection System (Refresh)" + if(device_info) + var/power = device_info["power"] + var/volume_rate = device_info["volume_rate"] + output += {" + + + + + + + + + + + + "} + + if(automation) + + // AUTOFIXED BY fix_string_idiocy.py + // C:\Users\Rob\Documents\Projects\vgstation13\code\game\machinery\atmo_control.dm:372: output += "Automated Fuel Injection: Engaged
" + output += {" + + + "} + // END AUTOFIX + else + + // AUTOFIXED BY fix_string_idiocy.py + // C:\Users\Rob\Documents\Projects\vgstation13\code\game\machinery\atmo_control.dm:375: output += "Automated Fuel Injection: Disengaged
" + output += {" + + + + "} + // END AUTOFIX + output += "
Status:[power?"Injecting":"On Hold"]
Rate:[volume_rate] L/sec
Automated Fuel Injection:[automation?"Engaged":"Disengaged"]
Injector Controls Locked Out
Injector:Toggle Power Inject (1 Cycle)
" + else + output += {"

ERROR: Can not find device. Search

"} + output += "
" + + return output + +/obj/machinery/computer/general_air_control/fuel_injection/receive_signal(datum/signal/signal) + if(!signal || signal.encryption) return + + var/id_tag = signal.data["tag"] + + if(device_tag == id_tag) + device_info = signal.data + else + ..(signal) + +/obj/machinery/computer/general_air_control/fuel_injection/Topic(href, href_list) + if(..()) + return + + if(href_list["refresh_status"]) + device_info = null + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + signal.data = list( + "tag" = device_tag, + "status", + "sigtype"="command" + ) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + + if(href_list["toggle_automation"]) + automation = !automation + + if(href_list["toggle_injector"]) + device_info = null + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + signal.data = list( + "tag" = device_tag, + "power_toggle", + "sigtype"="command" + ) + + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + + if(href_list["injection"]) + if(!radio_connection) + return 0 + + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src + signal.data = list( + "tag" = device_tag, + "inject", + "sigtype"="command" + ) + + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + /obj/machinery/computer/atmoscontrol name = "\improper central atmospherics computer" icon = 'icons/obj/computer.dmi' diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index a8c9710ff6c..d434dbff73c 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -1,3 +1,6 @@ +#define CIRC_LEFT WEST +#define CIRC_RIGHT EAST + /obj/item/pipe name = "pipe" desc = "A pipe" diff --git a/code/LINDA/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm similarity index 100% rename from code/LINDA/LINDA_fire.dm rename to code/modules/atmospherics/environmental/LINDA_fire.dm diff --git a/code/LINDA/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm similarity index 100% rename from code/LINDA/LINDA_system.dm rename to code/modules/atmospherics/environmental/LINDA_system.dm diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm similarity index 100% rename from code/LINDA/LINDA_turf_tile.dm rename to code/modules/atmospherics/environmental/LINDA_turf_tile.dm diff --git a/code/datums/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm similarity index 100% rename from code/datums/gas_mixture.dm rename to code/modules/atmospherics/gasmixtures/gas_mixture.dm diff --git a/code/game/machinery/alarm.dm b/code/modules/atmospherics/machinery/airalarm.dm similarity index 100% rename from code/game/machinery/alarm.dm rename to code/modules/atmospherics/machinery/airalarm.dm diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm similarity index 100% rename from code/ATMOSPHERICS/atmospherics.dm rename to code/modules/atmospherics/machinery/atmospherics.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm similarity index 100% rename from code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm rename to code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm similarity index 96% rename from code/ATMOSPHERICS/components/binary_devices/circulator.dm rename to code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index b45dd8929b4..ae45d15a6e1 100644 --- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -1,8 +1,3 @@ -//node1, air1, network1 correspond to input -//node2, air2, network2 correspond to output -#define CIRC_LEFT WEST -#define CIRC_RIGHT EAST - /obj/machinery/atmospherics/binary/circulator name = "circulator/heat exchanger" desc = "A gas circulator pump and heat exchanger. Its input port is on the south side, and its output port is on the north side." diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm similarity index 100% rename from code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm rename to code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm similarity index 100% rename from code/ATMOSPHERICS/components/binary_devices/passive_gate.dm rename to code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm similarity index 100% rename from code/ATMOSPHERICS/components/binary_devices/pump.dm rename to code/modules/atmospherics/machinery/components/binary_devices/pump.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm similarity index 100% rename from code/ATMOSPHERICS/components/binary_devices/valve.dm rename to code/modules/atmospherics/machinery/components/binary_devices/valve.dm diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm similarity index 100% rename from code/ATMOSPHERICS/components/binary_devices/volume_pump.dm rename to code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm similarity index 100% rename from code/ATMOSPHERICS/components/trinary_devices/filter.dm rename to code/modules/atmospherics/machinery/components/trinary_devices/filter.dm diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm similarity index 100% rename from code/ATMOSPHERICS/components/trinary_devices/mixer.dm rename to code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm similarity index 100% rename from code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm rename to code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm diff --git a/code/ATMOSPHERICS/components/trinary_devices/tvalve.dm b/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm similarity index 100% rename from code/ATMOSPHERICS/components/trinary_devices/tvalve.dm rename to code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm diff --git a/code/game/machinery/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm similarity index 100% rename from code/game/machinery/cryo.dm rename to code/modules/atmospherics/machinery/components/unary_devices/cryo.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/generator_input.dm b/code/modules/atmospherics/machinery/components/unary_devices/generator_input.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/generator_input.dm rename to code/modules/atmospherics/machinery/components/unary_devices/generator_input.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/heat_exchanger.dm rename to code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm rename to code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm b/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm rename to code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/passive_vent.dm rename to code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/portables_connector.dm rename to code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/tank.dm rename to code/modules/atmospherics/machinery/components/unary_devices/tank.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermal_plate.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/thermal_plate.dm rename to code/modules/atmospherics/machinery/components/unary_devices/thermal_plate.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/thermomachine.dm rename to code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/unary_base.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_base.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/unary_base.dm rename to code/modules/atmospherics/machinery/components/unary_devices/unary_base.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/vent_pump.dm rename to code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm similarity index 100% rename from code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm rename to code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm diff --git a/code/ATMOSPHERICS/datum_icon_manager.dm b/code/modules/atmospherics/machinery/datum_icon_manager.dm similarity index 100% rename from code/ATMOSPHERICS/datum_icon_manager.dm rename to code/modules/atmospherics/machinery/datum_icon_manager.dm diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm similarity index 100% rename from code/ATMOSPHERICS/datum_pipeline.dm rename to code/modules/atmospherics/machinery/datum_pipeline.dm diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/modules/atmospherics/machinery/other/area_atmos_computer.dm similarity index 100% rename from code/game/machinery/atmoalter/area_atmos_computer.dm rename to code/modules/atmospherics/machinery/other/area_atmos_computer.dm diff --git a/code/game/machinery/atmoalter/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm similarity index 100% rename from code/game/machinery/atmoalter/meter.dm rename to code/modules/atmospherics/machinery/other/meter.dm diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/modules/atmospherics/machinery/pipes/cap.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/cap.dm rename to code/modules/atmospherics/machinery/pipes/cap.dm diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/manifold.dm rename to code/modules/atmospherics/machinery/pipes/manifold.dm diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/manifold4w.dm rename to code/modules/atmospherics/machinery/pipes/manifold4w.dm diff --git a/code/ATMOSPHERICS/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/pipe.dm rename to code/modules/atmospherics/machinery/pipes/pipe.dm diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/simple/pipe_simple.dm rename to code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_he.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/simple/pipe_simple_he.dm rename to code/modules/atmospherics/machinery/pipes/simple/pipe_simple_he.dm diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/simple/pipe_simple_hidden.dm rename to code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_insulated.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/simple/pipe_simple_insulated.dm rename to code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm similarity index 100% rename from code/ATMOSPHERICS/pipes/simple/pipe_simple_visible.dm rename to code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm diff --git a/code/game/machinery/atmoalter/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm similarity index 100% rename from code/game/machinery/atmoalter/canister.dm rename to code/modules/atmospherics/machinery/portable/canister.dm diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm similarity index 100% rename from code/game/machinery/atmoalter/portable_atmospherics.dm rename to code/modules/atmospherics/machinery/portable/portable_atmospherics.dm diff --git a/code/game/machinery/atmoalter/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm similarity index 100% rename from code/game/machinery/atmoalter/pump.dm rename to code/modules/atmospherics/machinery/portable/pump.dm diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm similarity index 100% rename from code/game/machinery/atmoalter/scrubber.dm rename to code/modules/atmospherics/machinery/portable/scrubber.dm diff --git a/paradise.dme b/paradise.dme index 8b2dffd29f6..1c4b94cbb2e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -178,41 +178,6 @@ #include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\slime.dm" #include "code\_onclick\hud\swarmer.dm" -#include "code\ATMOSPHERICS\atmospherics.dm" -#include "code\ATMOSPHERICS\datum_icon_manager.dm" -#include "code\ATMOSPHERICS\datum_pipeline.dm" -#include "code\ATMOSPHERICS\components\binary_devices\binary_atmos_base.dm" -#include "code\ATMOSPHERICS\components\binary_devices\circulator.dm" -#include "code\ATMOSPHERICS\components\binary_devices\dp_vent_pump.dm" -#include "code\ATMOSPHERICS\components\binary_devices\passive_gate.dm" -#include "code\ATMOSPHERICS\components\binary_devices\pump.dm" -#include "code\ATMOSPHERICS\components\binary_devices\valve.dm" -#include "code\ATMOSPHERICS\components\binary_devices\volume_pump.dm" -#include "code\ATMOSPHERICS\components\trinary_devices\filter.dm" -#include "code\ATMOSPHERICS\components\trinary_devices\mixer.dm" -#include "code\ATMOSPHERICS\components\trinary_devices\trinary_base.dm" -#include "code\ATMOSPHERICS\components\trinary_devices\tvalve.dm" -#include "code\ATMOSPHERICS\components\unary_devices\generator_input.dm" -#include "code\ATMOSPHERICS\components\unary_devices\heat_exchanger.dm" -#include "code\ATMOSPHERICS\components\unary_devices\outlet_injector.dm" -#include "code\ATMOSPHERICS\components\unary_devices\oxygen_generator.dm" -#include "code\ATMOSPHERICS\components\unary_devices\passive_vent.dm" -#include "code\ATMOSPHERICS\components\unary_devices\portables_connector.dm" -#include "code\ATMOSPHERICS\components\unary_devices\tank.dm" -#include "code\ATMOSPHERICS\components\unary_devices\thermal_plate.dm" -#include "code\ATMOSPHERICS\components\unary_devices\thermomachine.dm" -#include "code\ATMOSPHERICS\components\unary_devices\unary_base.dm" -#include "code\ATMOSPHERICS\components\unary_devices\vent_pump.dm" -#include "code\ATMOSPHERICS\components\unary_devices\vent_scrubber.dm" -#include "code\ATMOSPHERICS\pipes\cap.dm" -#include "code\ATMOSPHERICS\pipes\manifold.dm" -#include "code\ATMOSPHERICS\pipes\manifold4w.dm" -#include "code\ATMOSPHERICS\pipes\pipe.dm" -#include "code\ATMOSPHERICS\pipes\simple\pipe_simple.dm" -#include "code\ATMOSPHERICS\pipes\simple\pipe_simple_he.dm" -#include "code\ATMOSPHERICS\pipes\simple\pipe_simple_hidden.dm" -#include "code\ATMOSPHERICS\pipes\simple\pipe_simple_insulated.dm" -#include "code\ATMOSPHERICS\pipes\simple\pipe_simple_visible.dm" #include "code\controllers\configuration.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" @@ -291,7 +256,6 @@ #include "code\datums\datumvars.dm" #include "code\datums\discord.dm" #include "code\datums\dog_fashion.dm" -#include "code\datums\gas_mixture.dm" #include "code\datums\holocall.dm" #include "code\datums\http.dm" #include "code\datums\hud.dm" @@ -659,15 +623,12 @@ #include "code\game\jobs\job_objectives\science.dm" #include "code\game\machinery\adv_med.dm" #include "code\game\machinery\ai_slipper.dm" -#include "code\game\machinery\alarm.dm" -#include "code\game\machinery\atmo_control.dm" #include "code\game\machinery\autolathe.dm" #include "code\game\machinery\Beacon.dm" #include "code\game\machinery\buttons.dm" #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cloning.dm" #include "code\game\machinery\constructable_frame.dm" -#include "code\game\machinery\cryo.dm" #include "code\game\machinery\cryopod.dm" #include "code\game\machinery\dance_machine.dm" #include "code\game\machinery\defib_mount.dm" @@ -716,13 +677,6 @@ #include "code\game\machinery\vending.dm" #include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\wishgranter.dm" -#include "code\game\machinery\atmoalter\area_atmos_computer.dm" -#include "code\game\machinery\atmoalter\canister.dm" -#include "code\game\machinery\atmoalter\meter.dm" -#include "code\game\machinery\atmoalter\portable_atmospherics.dm" -#include "code\game\machinery\atmoalter\pump.dm" -#include "code\game\machinery\atmoalter\scrubber.dm" -#include "code\game\machinery\atmoalter\zvent.dm" #include "code\game\machinery\camera\camera.dm" #include "code\game\machinery\camera\camera_assembly.dm" #include "code\game\machinery\camera\motion.dm" @@ -1194,9 +1148,6 @@ #include "code\game\verbs\randomtip.dm" #include "code\game\verbs\suicide.dm" #include "code\game\verbs\who.dm" -#include "code\LINDA\LINDA_fire.dm" -#include "code\LINDA\LINDA_system.dm" -#include "code\LINDA\LINDA_turf_tile.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_memo.dm" @@ -1316,6 +1267,53 @@ #include "code\modules\assembly\signaler.dm" #include "code\modules\assembly\timer.dm" #include "code\modules\assembly\voice.dm" +#include "code\modules\atmospherics\environmental\LINDA_fire.dm" +#include "code\modules\atmospherics\environmental\LINDA_system.dm" +#include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm" +#include "code\modules\atmospherics\gasmixtures\gas_mixture.dm" +#include "code\modules\atmospherics\machinery\airalarm.dm" +#include "code\modules\atmospherics\machinery\atmospherics.dm" +#include "code\modules\atmospherics\machinery\datum_icon_manager.dm" +#include "code\modules\atmospherics\machinery\datum_pipeline.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\binary_atmos_base.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\circulator.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\dp_vent_pump.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\passive_gate.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\pump.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\valve.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\volume_pump.dm" +#include "code\modules\atmospherics\machinery\components\trinary_devices\filter.dm" +#include "code\modules\atmospherics\machinery\components\trinary_devices\mixer.dm" +#include "code\modules\atmospherics\machinery\components\trinary_devices\trinary_base.dm" +#include "code\modules\atmospherics\machinery\components\trinary_devices\tvalve.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\cryo.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\generator_input.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\heat_exchanger.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\oxygen_generator.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\passive_vent.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\portables_connector.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\tank.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\thermal_plate.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\thermomachine.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\unary_base.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm" +#include "code\modules\atmospherics\machinery\components\unary_devices\vent_scrubber.dm" +#include "code\modules\atmospherics\machinery\other\area_atmos_computer.dm" +#include "code\modules\atmospherics\machinery\other\meter.dm" +#include "code\modules\atmospherics\machinery\pipes\cap.dm" +#include "code\modules\atmospherics\machinery\pipes\manifold.dm" +#include "code\modules\atmospherics\machinery\pipes\manifold4w.dm" +#include "code\modules\atmospherics\machinery\pipes\pipe.dm" +#include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple.dm" +#include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_he.dm" +#include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_hidden.dm" +#include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_insulated.dm" +#include "code\modules\atmospherics\machinery\pipes\simple\pipe_simple_visible.dm" +#include "code\modules\atmospherics\machinery\portable\canister.dm" +#include "code\modules\atmospherics\machinery\portable\portable_atmospherics.dm" +#include "code\modules\atmospherics\machinery\portable\pump.dm" +#include "code\modules\atmospherics\machinery\portable\scrubber.dm" #include "code\modules\awaymissions\corpse.dm" #include "code\modules\awaymissions\exile.dm" #include "code\modules\awaymissions\gateway.dm"