diff --git a/code/game/machinery/computer/atmos_computers/__identifiers.dm b/code/game/machinery/computer/atmos_computers/__identifiers.dm index 13d87b0b8ae..381fedd5bd0 100644 --- a/code/game/machinery/computer/atmos_computers/__identifiers.dm +++ b/code/game/machinery/computer/atmos_computers/__identifiers.dm @@ -31,6 +31,8 @@ #define ATMOS_GAS_MONITOR_DISTRO "distro" #define ATMOS_GAS_MONITOR_WASTE "waste" +///maps a chamber id to its air sensor +#define CHAMBER_SENSOR_FROM_ID(chamber_id) ((chamber_id) + "_sensor") ///maps an air sensor's chamber id to its input valve[ i.e. outlet_injector] id #define CHAMBER_INPUT_FROM_ID(chamber_id) ((chamber_id) + "_in") ///maps an air sensor's chamber id to its output valve[i.e. vent pump] id diff --git a/code/game/machinery/computer/atmos_computers/_air_sensor.dm b/code/game/machinery/computer/atmos_computers/_air_sensor.dm index 1dfe1bf396e..aca8b7ef43d 100644 --- a/code/game/machinery/computer/atmos_computers/_air_sensor.dm +++ b/code/game/machinery/computer/atmos_computers/_air_sensor.dm @@ -12,7 +12,7 @@ var/chamber_id /obj/machinery/air_sensor/Initialize(mapload) - id_tag = chamber_id + "_sensor" + id_tag = CHAMBER_SENSOR_FROM_ID(chamber_id) var/static/list/multitool_tips = list( TOOL_MULTITOOL = list( SCREENTIP_CONTEXT_LMB = "Link logged injectors/vents", diff --git a/code/game/machinery/computer/atmos_computers/_atmos_control.dm b/code/game/machinery/computer/atmos_computers/_atmos_control.dm index ab83a88a4cc..dd885e2c1dd 100644 --- a/code/game/machinery/computer/atmos_computers/_atmos_control.dm +++ b/code/game/machinery/computer/atmos_computers/_atmos_control.dm @@ -11,11 +11,20 @@ /// Assoc of list[chamber_id] = readable_chamber_name var/list/atmos_chambers + /// Used when control = FALSE to store the original atmos chambers so they dont get lost when reconnecting + var/list/always_displayed_chambers + /// Whether we can actually adjust the chambers or not. var/control = TRUE /// Whether we are allowed to reconnect. var/reconnecting = TRUE +/obj/machinery/computer/atmos_control/Initialize(mapload, obj/item/circuitboard/C) + . = ..() + //special case for the station monitering console. We dont want to loose these chambers during reconnecting + if(!control && !isnull(atmos_chambers)) + always_displayed_chambers = atmos_chambers.Copy() + /// Reconnect only works for station based chambers. /obj/machinery/computer/atmos_control/proc/reconnect(mob/user) if(!reconnecting) @@ -38,6 +47,10 @@ return FALSE atmos_chambers = list() + //these are chambers we always want to display even after reconnecting + if(always_displayed_chambers) + for(var/chamber_id in always_displayed_chambers) + atmos_chambers[chamber_id] = always_displayed_chambers[chamber_id] atmos_chambers[new_id] = new_name name = new_name + (control ? " Control" : " Monitor") @@ -69,7 +82,7 @@ chamber_info["id"] = chamber_id chamber_info["name"] = atmos_chambers[chamber_id] - var/obj/machinery/sensor = GLOB.objects_by_id_tag["[chamber_id]_sensor"] + var/obj/machinery/sensor = GLOB.objects_by_id_tag[CHAMBER_SENSOR_FROM_ID(chamber_id)] if (!isnull(sensor)) chamber_info["gasmix"] = gas_mixture_parser(sensor.return_air()) diff --git a/code/game/machinery/computer/atmos_computers/meters.dm b/code/game/machinery/computer/atmos_computers/meters.dm index 797bee21ff5..9ff6578852b 100644 --- a/code/game/machinery/computer/atmos_computers/meters.dm +++ b/code/game/machinery/computer/atmos_computers/meters.dm @@ -3,7 +3,7 @@ var/chamber_id /obj/machinery/meter/monitored/Initialize(mapload, new_piping_layer) - id_tag = chamber_id + "_sensor" + id_tag = CHAMBER_SENSOR_FROM_ID(chamber_id) . = ..() /obj/machinery/meter/monitored/layer2 diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index f0941b22408..1863e68c7ea 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -401,7 +401,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(info.type == /datum/pipe_info/sensor) var/datum/pipe_info/sensor/sensor_info = info var/obj/machinery/air_sensor/sensor = sensor_info.id - if(GLOB.objects_by_id_tag[initial(sensor.chamber_id) + "_sensor"] != null) + if(GLOB.objects_by_id_tag[CHAMBER_SENSOR_FROM_ID(initial(sensor.chamber_id))] != null) continue r += list(list("pipe_name" = info.name, "pipe_index" = i, "selected" = (info == recipe), "all_layers" = info.all_layers)) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 12ac25680fd..99aa175529f 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -58,6 +58,9 @@ icon_state = "meter" SSair.stop_processing_machine(src) +/obj/machinery/meter/return_air() + return target?.return_air() || ..() + /obj/machinery/meter/process_atmos() var/datum/gas_mixture/pipe_air = target.return_air() if(!pipe_air)