[MIRROR] Methane Atmogas (#11574)
Co-authored-by: Will <7099514+Willburd@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com>
@@ -10,6 +10,8 @@
|
||||
#define ATM_CO2 5
|
||||
#define ATM_P 6 //Phoron
|
||||
#define ATM_N2O 7
|
||||
#define ATM_METHANE 8
|
||||
#define ATM_LASTGAS 8 // Keep updated to match the latest gas in list above
|
||||
|
||||
//--------------------------------------------
|
||||
// Omni port datum
|
||||
@@ -104,5 +106,7 @@
|
||||
return GAS_PHORON
|
||||
if(ATM_N2O)
|
||||
return GAS_N2O
|
||||
if(ATM_METHANE)
|
||||
return GAS_CH4
|
||||
else
|
||||
return null
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
input = P
|
||||
if(ATM_OUTPUT)
|
||||
output = P
|
||||
if(ATM_O2 to ATM_N2O)
|
||||
if(ATM_O2 to ATM_LASTGAS)
|
||||
atmos_filters += P
|
||||
if(any_updated)
|
||||
rebuild_filtering_list()
|
||||
@@ -120,7 +120,7 @@
|
||||
if(ATM_OUTPUT)
|
||||
output = 1
|
||||
atmo_filter = 0
|
||||
if(ATM_O2 to ATM_N2O)
|
||||
if(ATM_O2 to ATM_LASTGAS)
|
||||
f_type = mode_send_switch(P.mode)
|
||||
|
||||
portData[++portData.len] = list("dir" = dir_name(P.dir, capitalize = 1), \
|
||||
@@ -140,15 +140,17 @@
|
||||
/obj/machinery/atmospherics/omni/atmos_filter/proc/mode_send_switch(var/mode = ATM_NONE)
|
||||
switch(mode)
|
||||
if(ATM_O2)
|
||||
return "Oxygen"
|
||||
return GASNAME_O2
|
||||
if(ATM_N2)
|
||||
return "Nitrogen"
|
||||
return GASNAME_N2
|
||||
if(ATM_CO2)
|
||||
return "Carbon Dioxide"
|
||||
return GASNAME_CO2
|
||||
if(ATM_P)
|
||||
return "Phoron" //*cough* Plasma *cough*
|
||||
return GASNAME_PHORON //*cough* Plasma *cough*
|
||||
if(ATM_N2O)
|
||||
return "Nitrous Oxide"
|
||||
return GASNAME_N2O
|
||||
if(ATM_METHANE)
|
||||
return GASNAME_CH4
|
||||
else
|
||||
return null
|
||||
|
||||
@@ -182,7 +184,7 @@
|
||||
if("switch_filter")
|
||||
if(!configuring || use_power)
|
||||
return
|
||||
var/new_filter = tgui_input_list(ui.user, "Select filter mode:", "Change filter", list("None", "Oxygen", "Nitrogen", "Carbon Dioxide", "Phoron", "Nitrous Oxide"))
|
||||
var/new_filter = tgui_input_list(ui.user, "Select filter mode:", "Change filter", list("None", GASNAME_O2, GASNAME_N2, GASNAME_CO2, GASNAME_PHORON, GASNAME_N2O, GASNAME_CH4))
|
||||
if(!new_filter)
|
||||
return
|
||||
switch_filter(dir_flag(params["dir"]), mode_return_switch(new_filter))
|
||||
@@ -192,16 +194,18 @@
|
||||
|
||||
/obj/machinery/atmospherics/omni/atmos_filter/proc/mode_return_switch(var/mode)
|
||||
switch(mode)
|
||||
if("Oxygen")
|
||||
if(GASNAME_O2)
|
||||
return ATM_O2
|
||||
if("Nitrogen")
|
||||
if(GASNAME_N2)
|
||||
return ATM_N2
|
||||
if("Carbon Dioxide")
|
||||
if(GASNAME_CO2)
|
||||
return ATM_CO2
|
||||
if("Phoron")
|
||||
if(GASNAME_PHORON)
|
||||
return ATM_P
|
||||
if("Nitrous Oxide")
|
||||
if(GASNAME_N2O)
|
||||
return ATM_N2O
|
||||
if(GASNAME_CH4)
|
||||
return ATM_METHANE
|
||||
if("in")
|
||||
return ATM_INPUT
|
||||
if("out")
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
if(ATM_OUTPUT)
|
||||
ic_on += "_out_glow"
|
||||
ic_off += "_out"
|
||||
if(ATM_O2 to ATM_N2O)
|
||||
if(ATM_O2 to ATM_LASTGAS)
|
||||
ic_on += "_filter"
|
||||
ic_off += "_out"
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
2: Nitrogen: Nitrogen ONLY
|
||||
3: Carbon Dioxide: Carbon Dioxide ONLY
|
||||
4: Nitrous Oxide (Formerly called Sleeping Agent) (N2O)
|
||||
5: Methane: Methane only
|
||||
*/
|
||||
var/filter_type = -1
|
||||
var/list/filtered_out = list()
|
||||
@@ -53,6 +54,8 @@
|
||||
filtered_out = list(GAS_CO2)
|
||||
if(4)//removing N2O
|
||||
filtered_out = list(GAS_N2O)
|
||||
if(5)//removing CH4
|
||||
filtered_out = list(GAS_CH4)
|
||||
|
||||
air1.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
air2.volume = ATMOS_DEFAULT_VOLUME_FILTER
|
||||
@@ -135,11 +138,12 @@
|
||||
|
||||
data["filter_types"] = list()
|
||||
data["filter_types"] += list(list("name" = "Nothing", "f_type" = -1, "selected" = filter_type == -1))
|
||||
data["filter_types"] += list(list("name" = "Phoron", "f_type" = 0, "selected" = filter_type == 0))
|
||||
data["filter_types"] += list(list("name" = "Oxygen", "f_type" = 1, "selected" = filter_type == 1))
|
||||
data["filter_types"] += list(list("name" = "Nitrogen", "f_type" = 2, "selected" = filter_type == 2))
|
||||
data["filter_types"] += list(list("name" = "Carbon Dioxide", "f_type" = 3, "selected" = filter_type == 3))
|
||||
data["filter_types"] += list(list("name" = "Nitrous Oxide", "f_type" = 4, "selected" = filter_type == 4))
|
||||
data["filter_types"] += list(list("name" = GASNAME_PHORON, "f_type" = 0, "selected" = filter_type == 0))
|
||||
data["filter_types"] += list(list("name" = GASNAME_O2, "f_type" = 1, "selected" = filter_type == 1))
|
||||
data["filter_types"] += list(list("name" = GASNAME_N2, "f_type" = 2, "selected" = filter_type == 2))
|
||||
data["filter_types"] += list(list("name" = GASNAME_CO2, "f_type" = 3, "selected" = filter_type == 3))
|
||||
data["filter_types"] += list(list("name" = GASNAME_N2O, "f_type" = 4, "selected" = filter_type == 4))
|
||||
data["filter_types"] += list(list("name" = GASNAME_CH4, "f_type" = 5, "selected" = filter_type == 5))
|
||||
|
||||
return data
|
||||
|
||||
@@ -176,6 +180,8 @@
|
||||
filtered_out += GAS_CO2
|
||||
if(4)//removing N2O
|
||||
filtered_out += GAS_N2O
|
||||
if(5)//removing CH4
|
||||
filtered_out += GAS_CH4
|
||||
|
||||
add_fingerprint(ui.user)
|
||||
update_icon()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
|
||||
var/list/scrubbing_gas = list(GAS_CO2, GAS_PHORON)
|
||||
var/list/scrubbing_gas = list(GAS_CO2, GAS_PHORON, GAS_CH4)
|
||||
|
||||
var/panic = 0 //is this scrubber panicked?
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
"filter_phoron" = (GAS_PHORON in scrubbing_gas),
|
||||
"filter_n2o" = (GAS_N2O in scrubbing_gas),
|
||||
"filter_fuel" = (GAS_VOLATILE_FUEL in scrubbing_gas),
|
||||
"filter_ch4" = (GAS_CH4 in scrubbing_gas),
|
||||
"sigtype" = "status"
|
||||
)
|
||||
if(!initial_loc.air_scrub_names[id_tag])
|
||||
@@ -241,6 +242,11 @@
|
||||
else if(signal.data["toggle_fuel_scrub"])
|
||||
toggle += GAS_VOLATILE_FUEL
|
||||
|
||||
if(!isnull(signal.data["ch4_scrub"]) && text2num(signal.data["ch4_scrub"]) != (GAS_CH4 in scrubbing_gas))
|
||||
toggle += GAS_CH4
|
||||
else if(signal.data["toggle_ch4_scrub"])
|
||||
toggle += GAS_CH4
|
||||
|
||||
scrubbing_gas ^= toggle
|
||||
|
||||
if(signal.data["init"] != null)
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber
|
||||
scrubbing_gas = list(GAS_CO2, GAS_PHORON)
|
||||
@@ -2,7 +2,7 @@
|
||||
// Tanks - These are implemented as pipes with large volume
|
||||
//
|
||||
/obj/machinery/atmospherics/pipe/tank
|
||||
icon = 'icons/atmos/tank_vr.dmi' //VOREStation Edit - New Icons
|
||||
icon = 'icons/atmos/tank.dmi'
|
||||
icon_state = "air_map"
|
||||
|
||||
name = "Pressure Tank"
|
||||
@@ -158,3 +158,17 @@
|
||||
|
||||
. = ..()
|
||||
icon_state = "n2o"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/methane
|
||||
name = "Pressure Tank (Methane)"
|
||||
icon_state = "ch4_map"
|
||||
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_FUEL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/methane/Initialize(mapload)
|
||||
. = ..()
|
||||
air_temporary = new
|
||||
air_temporary.volume = volume
|
||||
air_temporary.temperature = T20C
|
||||
|
||||
air_temporary.adjust_gas(GAS_CH4, (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
|
||||
icon_state = "ch4"
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
//Create gas mixture to hold data for passing
|
||||
var/datum/gas_mixture/GM = new
|
||||
|
||||
GM.adjust_multi(GAS_O2, oxygen, GAS_CO2, carbon_dioxide, GAS_N2, nitrogen, GAS_PHORON, phoron)
|
||||
GM.adjust_multi(GAS_O2, oxygen, GAS_CO2, carbon_dioxide, GAS_N2, nitrogen, GAS_PHORON, phoron, GAS_N2O, nitrous_oxide, GAS_CH4, methane)
|
||||
GM.temperature = temperature
|
||||
|
||||
return GM
|
||||
@@ -290,12 +290,14 @@
|
||||
/turf/remove_air(amount as num)
|
||||
var/datum/gas_mixture/GM = new
|
||||
|
||||
var/sum = oxygen + carbon_dioxide + nitrogen + phoron
|
||||
var/sum = oxygen + carbon_dioxide + nitrogen + phoron + nitrous_oxide + methane
|
||||
if(sum>0)
|
||||
GM.gas[GAS_O2] = (oxygen/sum)*amount
|
||||
GM.gas[GAS_CO2] = (carbon_dioxide/sum)*amount
|
||||
GM.gas[GAS_N2] = (nitrogen/sum)*amount
|
||||
GM.gas[GAS_PHORON] = (phoron/sum)*amount
|
||||
GM.gas[GAS_O2] = (oxygen / sum) * amount
|
||||
GM.gas[GAS_CO2] = (carbon_dioxide / sum) * amount
|
||||
GM.gas[GAS_N2] = (nitrogen / sum) * amount
|
||||
GM.gas[GAS_PHORON] = (phoron / sum) * amount
|
||||
GM.gas[GAS_N2O] = (nitrous_oxide / sum) * amount
|
||||
GM.gas[GAS_CH4] = (methane / sum) * amount
|
||||
|
||||
GM.temperature = temperature
|
||||
GM.update_values()
|
||||
@@ -338,7 +340,7 @@
|
||||
/turf/proc/make_air()
|
||||
air = new/datum/gas_mixture
|
||||
air.temperature = temperature
|
||||
air.adjust_multi(GAS_O2, oxygen, GAS_CO2, carbon_dioxide, GAS_N2, nitrogen, GAS_PHORON, phoron)
|
||||
air.adjust_multi(GAS_O2, oxygen, GAS_CO2, carbon_dioxide, GAS_N2, nitrogen, GAS_PHORON, phoron, GAS_N2O, nitrous_oxide, GAS_CH4, methane)
|
||||
air.group_multiplier = 1
|
||||
air.volume = CELL_VOLUME
|
||||
|
||||
|
||||
@@ -6,21 +6,26 @@
|
||||
|
||||
// Gasses
|
||||
#define GAS_CO2 "carbon_dioxide"
|
||||
#define GASNAME_CO2 "Carbon Dioxide"
|
||||
#define GAS_N2 "nitrogen"
|
||||
#define GASNAME_N2 "Nitrogen"
|
||||
#define GAS_N2O "nitrous_oxide"
|
||||
#define GASNAME_N2O "Nitrous Oxide"
|
||||
#define GAS_O2 "oxygen"
|
||||
#define GASNAME_O2 "Oxygen"
|
||||
#define GAS_PHORON "phoron"
|
||||
#define GASNAME_PHORON "Phoron"
|
||||
#define GAS_VOLATILE_FUEL "volatile_fuel"
|
||||
#define GASNAME_VOLATILE_FUEL "Volatile Fuel"
|
||||
#define GAS_CH4 "methane"
|
||||
#define GASNAME_CH4 "Methane"
|
||||
|
||||
|
||||
// Gas Reagents
|
||||
#define REAGENT_CARBON_DIOXIDE "Carbon Dioxide"
|
||||
#define REAGENT_NITROGEN "Nitrogen"
|
||||
#define REAGENT_ID_NITROGEN "nitrogen"
|
||||
#define REAGENT_NITROUS_OXIDE "Nitrous Oxide"
|
||||
#define REAGENT_OXYGEN "Oxygen"
|
||||
#define REAGENT_ID_OXYGEN "oxygen"
|
||||
#define REAGENT_VOLATILE_FUEL "Volatile Fuel"
|
||||
#define REAGENT_HYDROGEN "Hydrogen"
|
||||
#define REAGENT_ID_HYDROGEN "hydrogen"
|
||||
#define REAGENT_FLUORINE "Fluorine"
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
#define ATMOSTANK_CO2 25000 // CO2 and PH are not critically important for station, only for toxins and alternative coolants, no need to store a lot of those.
|
||||
#define ATMOSTANK_PHORON 25000
|
||||
#define ATMOSTANK_NITROUSOXIDE 10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
|
||||
#define ATMOSTANK_METHANE 5000 // Methane! Lowest tank pressure, because it's not really useful anyway except as a dump tank
|
||||
|
||||
// Used in various things like tanks and oxygen pumps.
|
||||
#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
|
||||
|
||||
@@ -153,6 +153,17 @@ Your emergency supply kit should have an air tank and gas mask in it!" // C
|
||||
name = "Choking (No Breath)"
|
||||
desc = "The atmosphere around you lacks any form of breathable air! Find some good air before you pass out!"
|
||||
icon_state = "not_enough_oxy"
|
||||
|
||||
/obj/screen/alert/methane_in_air
|
||||
name = "Choking (Methane)"
|
||||
desc = "There's highly flammable methane in the air, making it hard to breathe. Find some fresh air. \
|
||||
The box in your backpack has an oxygen tank and gas mask in it."
|
||||
icon_state = "not_enough_oxy"
|
||||
|
||||
/obj/screen/alert/not_enough_methane
|
||||
name = "Choking (No Methane)"
|
||||
desc = "You're not getting enough methane. Find some good air before you pass out!"
|
||||
icon_state = "not_enough_tox"
|
||||
//End gas alerts
|
||||
|
||||
|
||||
|
||||
@@ -409,6 +409,12 @@
|
||||
else
|
||||
contents.Add(0)
|
||||
|
||||
// Grunts rejoice!
|
||||
if (GAS_CH4)
|
||||
if(t.air_contents.gas[GAS_CH4] && !t.air_contents.gas[GAS_O2])
|
||||
contents.Add(t.air_contents.gas[GAS_CH4])
|
||||
else
|
||||
contents.Add(0)
|
||||
|
||||
else
|
||||
//no tank so we set contents to 0
|
||||
|
||||
@@ -525,6 +525,10 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
|
||||
return FALSE
|
||||
if(A.carbon_dioxide != B.carbon_dioxide)
|
||||
return FALSE
|
||||
if(A.nitrous_oxide != B.nitrous_oxide)
|
||||
return FALSE
|
||||
if(A.methane != B.methane)
|
||||
return FALSE
|
||||
if(A.temperature != B.temperature)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -111,6 +111,7 @@ SUBSYSTEM_DEF(plants)
|
||||
if(survive_on_station)
|
||||
if(seed.consume_gasses)
|
||||
seed.consume_gasses[GAS_PHORON] = null
|
||||
seed.consume_gasses[GAS_CH4] = null
|
||||
seed.consume_gasses[GAS_CO2] = null
|
||||
if(seed.chems && !isnull(seed.chems[REAGENT_ID_PACID]))
|
||||
seed.chems[REAGENT_ID_PACID] = null // Eating through the hull will make these plants completely inviable, albeit very dangerous.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/decl/xgm_gas/oxygen
|
||||
id = GAS_O2
|
||||
name = REAGENT_OXYGEN
|
||||
name = GASNAME_O2
|
||||
specific_heat = 20 // J/(mol*K)
|
||||
molar_mass = 0.032 // kg/mol
|
||||
|
||||
@@ -8,19 +8,19 @@
|
||||
|
||||
/decl/xgm_gas/nitrogen
|
||||
id = GAS_N2
|
||||
name = REAGENT_NITROGEN
|
||||
name = GASNAME_N2
|
||||
specific_heat = 20 // J/(mol*K)
|
||||
molar_mass = 0.028 // kg/mol
|
||||
|
||||
/decl/xgm_gas/carbon_dioxide
|
||||
id = GAS_CO2
|
||||
name = REAGENT_CARBON_DIOXIDE
|
||||
name = GASNAME_CO2
|
||||
specific_heat = 30 // J/(mol*K)
|
||||
molar_mass = 0.044 // kg/mol
|
||||
|
||||
/decl/xgm_gas/phoron
|
||||
id = GAS_PHORON
|
||||
name = REAGENT_PHORON
|
||||
name = GASNAME_PHORON
|
||||
|
||||
//Note that this has a significant impact on TTV yield.
|
||||
//Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure.
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/decl/xgm_gas/volatile_fuel
|
||||
id = GAS_VOLATILE_FUEL
|
||||
name = REAGENT_VOLATILE_FUEL
|
||||
name = GASNAME_VOLATILE_FUEL
|
||||
specific_heat = 253 // J/(mol*K) C8H18 gasoline. Isobaric, but good enough.
|
||||
molar_mass = 0.114 // kg/mol. same.
|
||||
|
||||
@@ -45,10 +45,19 @@
|
||||
|
||||
/decl/xgm_gas/nitrous_oxide
|
||||
id = GAS_N2O
|
||||
name = REAGENT_NITROUS_OXIDE
|
||||
name = GASNAME_N2O
|
||||
specific_heat = 40 // J/(mol*K)
|
||||
molar_mass = 0.044 // kg/mol. N2O
|
||||
|
||||
tile_overlay = "nitrous_oxide"
|
||||
overlay_limit = 1
|
||||
flags = XGM_GAS_OXIDIZER
|
||||
|
||||
/decl/xgm_gas/methane
|
||||
id = GAS_CH4
|
||||
name = GASNAME_CH4
|
||||
specific_heat = 34 // J/(mol*K)
|
||||
molar_mass = 0.016 // kg/mol
|
||||
overlay_limit = 1
|
||||
tile_overlay = "miasma"
|
||||
flags = XGM_GAS_FUEL
|
||||
|
||||
@@ -164,6 +164,7 @@
|
||||
TLV[GAS_N2] = list(0, 0, 135, 140) // Partial pressure, kpa
|
||||
TLV[GAS_CO2] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
|
||||
TLV[GAS_PHORON] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa
|
||||
TLV[GAS_CH4] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa
|
||||
TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa
|
||||
TLV["pressure"] = list(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE * 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20) /* kpa */
|
||||
TLV["temperature"] = list(T0C - 26, T0C, T0C + 40, T0C + 66) // K
|
||||
@@ -308,6 +309,8 @@
|
||||
var/co2_dangerlevel = TEST_TLV_VALUES
|
||||
LOAD_TLV_VALUES(TLV[GAS_PHORON], environment.gas[GAS_PHORON]*partial_pressure)
|
||||
var/phoron_dangerlevel = TEST_TLV_VALUES
|
||||
LOAD_TLV_VALUES(TLV[GAS_CH4], environment.gas[GAS_CH4]*partial_pressure)
|
||||
var/methane_dangerlevel = TEST_TLV_VALUES
|
||||
LOAD_TLV_VALUES(TLV["temperature"], environment.temperature)
|
||||
var/temperature_dangerlevel = TEST_TLV_VALUES
|
||||
LOAD_TLV_VALUES(TLV["other"], other_moles*partial_pressure)
|
||||
@@ -318,6 +321,7 @@
|
||||
oxygen_dangerlevel,
|
||||
co2_dangerlevel,
|
||||
phoron_dangerlevel,
|
||||
methane_dangerlevel,
|
||||
other_dangerlevel,
|
||||
temperature_dangerlevel
|
||||
)
|
||||
@@ -653,12 +657,13 @@
|
||||
"scrubbing" = info["scrubbing"],
|
||||
"panic" = info["panic"],
|
||||
"filters" = list(
|
||||
list("name" = "Oxygen", "command" = "o2_scrub", "val" = info["filter_o2"]),
|
||||
list("name" = "Nitrogen", "command" = "n2_scrub", "val" = info["filter_n2"]),
|
||||
list("name" = "Carbon Dioxide", "command" = "co2_scrub","val" = info["filter_co2"]),
|
||||
list("name" = "Phoron" , "command" = "tox_scrub","val" = info["filter_phoron"]),
|
||||
list("name" = "Nitrous Oxide", "command" = "n2o_scrub","val" = info["filter_n2o"]),
|
||||
list("name" = "Volatile Fuel", "command" = "fuel_scrub","val" = info["filter_fuel"])
|
||||
list("name" = GASNAME_O2, "command" = "o2_scrub", "val" = info["filter_o2"]),
|
||||
list("name" = GASNAME_N2, "command" = "n2_scrub", "val" = info["filter_n2"]),
|
||||
list("name" = GASNAME_CO2, "command" = "co2_scrub", "val" = info["filter_co2"]),
|
||||
list("name" = GASNAME_PHORON, "command" = "tox_scrub", "val" = info["filter_phoron"]),
|
||||
list("name" = GASNAME_CH4, "command" = "ch4_scrub", "val" = info["filter_ch4"]),
|
||||
list("name" = GASNAME_N2O, "command" = "n2o_scrub", "val" = info["filter_n2o"]),
|
||||
list("name" = GASNAME_VOLATILE_FUEL,"command" = "fuel_scrub", "val" = info["filter_fuel"])
|
||||
)
|
||||
))
|
||||
data["scrubbers"] = scrubbers
|
||||
@@ -677,7 +682,7 @@
|
||||
var/list/selected
|
||||
var/list/thresholds = list()
|
||||
|
||||
var/list/gas_names = list(GAS_O2, GAS_CO2, GAS_PHORON, "other") //Gas ids made to match code\defines\gases.dm
|
||||
var/list/gas_names = list(GAS_O2, GAS_CO2, GAS_PHORON, GAS_CH4, "other") //Gas ids made to match code\defines\gases.dm
|
||||
for(var/g in gas_names)
|
||||
thresholds[++thresholds.len] = list("name" = g, "settings" = list())
|
||||
selected = TLV[g]
|
||||
@@ -749,6 +754,7 @@
|
||||
"tox_scrub",
|
||||
"n2o_scrub",
|
||||
"fuel_scrub",
|
||||
"ch4_scrub",
|
||||
"panic_siphon",
|
||||
"scrubbing",
|
||||
"direction")
|
||||
@@ -894,8 +900,9 @@
|
||||
. = ..()
|
||||
req_access = list(ACCESS_RD, ACCESS_ATMOSPHERICS, ACCESS_ENGINE_EQUIP)
|
||||
TLV[GAS_O2] = list(-1.0, -1.0,-1.0,-1.0) // Partial pressure, kpa
|
||||
TLV[GAS_CO2] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
|
||||
TLV[GAS_PHORON] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa
|
||||
TLV[GAS_CO2] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
|
||||
TLV[GAS_PHORON] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa
|
||||
TLV[GAS_CH4] = list(-1.0, -1.0, 0, 0.5) // Partial pressure, kpa
|
||||
TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa
|
||||
TLV["pressure"] = list(0,ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60) /* kpa */
|
||||
TLV["temperature"] = list(20, 40, 140, 160) // K
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#define SENSOR_N2 (1<<4)
|
||||
#define SENSOR_CO2 (1<<5)
|
||||
#define SENSOR_N2O (1<<6)
|
||||
#define SENSOR_CH4 (1<<7)
|
||||
|
||||
/obj/machinery/air_sensor
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
@@ -59,11 +60,14 @@
|
||||
signal.data[GAS_N2] = round(100*air_sample.gas[GAS_N2]/total_moles,0.1)
|
||||
if(output&32)
|
||||
signal.data[GAS_CO2] = round(100*air_sample.gas[GAS_CO2]/total_moles,0.1)
|
||||
if(output&64)
|
||||
signal.data[GAS_CH4] = round(100*air_sample.gas[GAS_CH4]/total_moles,0.1)
|
||||
else
|
||||
signal.data[GAS_O2] = 0
|
||||
signal.data[GAS_PHORON] = 0
|
||||
signal.data[GAS_N2] = 0
|
||||
signal.data[GAS_CO2] = 0
|
||||
signal.data[GAS_CH4] = 0
|
||||
signal.data["sigtype"]="status"
|
||||
radio_connection.post_signal(src, signal, radio_filter = RADIO_ATMOSIA)
|
||||
|
||||
@@ -103,13 +107,14 @@
|
||||
#define ONOFF_TOGGLE(flag) "\[[(output & flag) ? "YES" : "NO"]]"
|
||||
/obj/machinery/air_sensor/proc/multitool_act(mob/living/user, obj/item/multitool/tool)
|
||||
var/list/options = list(
|
||||
"Pressure: [ONOFF_TOGGLE(SENSOR_PRESSURE)]" = SENSOR_PRESSURE,
|
||||
"Temperature: [ONOFF_TOGGLE(SENSOR_TEMPERATURE)]" = SENSOR_TEMPERATURE,
|
||||
"Oxygen: [ONOFF_TOGGLE(SENSOR_O2)]" = SENSOR_O2,
|
||||
"Toxins: [ONOFF_TOGGLE(SENSOR_PHORON)]" = SENSOR_PHORON,
|
||||
"Nitrogen: [ONOFF_TOGGLE(SENSOR_N2)]" = SENSOR_N2,
|
||||
"Carbon Dioxide: [ONOFF_TOGGLE(SENSOR_CO2)]" = SENSOR_CO2,
|
||||
"Nitrous Oxide: [ONOFF_TOGGLE(SENSOR_N2O)]" = SENSOR_N2O,
|
||||
"Pressure: [ONOFF_TOGGLE(SENSOR_PRESSURE)]" = SENSOR_PRESSURE,
|
||||
"Temperature: [ONOFF_TOGGLE(SENSOR_TEMPERATURE)]" = SENSOR_TEMPERATURE,
|
||||
"[GASNAME_O2]: [ONOFF_TOGGLE(SENSOR_O2)]" = SENSOR_O2,
|
||||
"[GASNAME_PHORON]: [ONOFF_TOGGLE(SENSOR_PHORON)]" = SENSOR_PHORON,
|
||||
"[GASNAME_N2]: [ONOFF_TOGGLE(SENSOR_N2)]" = SENSOR_N2,
|
||||
"[GASNAME_CO2]: [ONOFF_TOGGLE(SENSOR_CO2)]" = SENSOR_CO2,
|
||||
"[GASNAME_N2O]: [ONOFF_TOGGLE(SENSOR_N2O)]" = SENSOR_N2O,
|
||||
"[GASNAME_CH4]: [ONOFF_TOGGLE(SENSOR_CH4)]" = SENSOR_CH4,
|
||||
"-SAVE TO BUFFER-" = "multitool"
|
||||
)
|
||||
|
||||
@@ -134,6 +139,8 @@
|
||||
output ^= SENSOR_CO2
|
||||
if(SENSOR_N2O)
|
||||
output ^= SENSOR_N2O
|
||||
if(SENSOR_CH4)
|
||||
output ^= SENSOR_CH4
|
||||
if("frequency")
|
||||
var/new_frequency = tgui_input_number(user, "[src] has a frequency of [frequency]. What would you like it to be?", "[src] frequency", frequency, RADIO_HIGH_FREQ, RADIO_LOW_FREQ)
|
||||
if(new_frequency)
|
||||
@@ -748,3 +755,4 @@
|
||||
#undef SENSOR_N2
|
||||
#undef SENSOR_CO2
|
||||
#undef SENSOR_N2O
|
||||
#undef SENSOR_CH4
|
||||
|
||||
@@ -63,6 +63,12 @@
|
||||
canister_color = "black"
|
||||
can_label = 0
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/methane
|
||||
name = "Canister: \[CH4\]"
|
||||
icon_state = "green"
|
||||
canister_color = "green"
|
||||
can_label = 0
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/air
|
||||
name = "Canister \[Air\]"
|
||||
icon_state = "grey"
|
||||
@@ -97,6 +103,10 @@
|
||||
icon_state = "redws"
|
||||
canister_color = "redws"
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/empty/methane
|
||||
name = "Canister \[CH4\]"
|
||||
icon_state = "green"
|
||||
canister_color = "green"
|
||||
|
||||
|
||||
|
||||
@@ -438,6 +448,10 @@ update_flag
|
||||
air_contents.adjust_gas(GAS_CO2, MolesForPressure())
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/methane/Initialize(mapload)
|
||||
. = ..()
|
||||
air_contents.adjust_gas(GAS_CH4, MolesForPressure())
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/air/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
var/minrate = 0
|
||||
var/maxrate = 10 * ONE_ATMOSPHERE
|
||||
|
||||
var/list/scrubbing_gas = list(GAS_PHORON, GAS_CO2, GAS_N2O, GAS_VOLATILE_FUEL)
|
||||
var/list/scrubbing_gas = list(GAS_PHORON, GAS_CO2, GAS_N2O, GAS_VOLATILE_FUEL, GAS_CH4)
|
||||
|
||||
/obj/machinery/portable_atmospherics/powered/scrubber/Initialize(mapload, skip_cell)
|
||||
. = ..()
|
||||
|
||||
@@ -1,37 +1,5 @@
|
||||
/obj/item/communicator/proc/analyze_air()
|
||||
var/list/results = list()
|
||||
var/turf/T = get_turf(src.loc)
|
||||
if(!isnull(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
if (total_moles)
|
||||
var/o2_level = environment.gas[GAS_O2]/total_moles
|
||||
var/n2_level = environment.gas[GAS_N2]/total_moles
|
||||
var/co2_level = environment.gas[GAS_CO2]/total_moles
|
||||
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
|
||||
// Label is what the entry is describing
|
||||
// Type identifies which unit or other special characters to use
|
||||
// Val is the information reported
|
||||
// Bad_high/_low are the values outside of which the entry reports as dangerous
|
||||
// Poor_high/_low are the values outside of which the entry reports as unideal
|
||||
// Values were extracted from the template itself
|
||||
results = list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "\u00B0" + "C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
)
|
||||
|
||||
if(isnull(results))
|
||||
results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
|
||||
return results
|
||||
|
||||
return get_gas_mixture_default_scan_data(get_turf(src.loc))
|
||||
|
||||
// Proc - compile_news()
|
||||
// Parameters - none
|
||||
|
||||
@@ -265,3 +265,49 @@
|
||||
/obj/item/tank/stasis/nitro_cryo/Initialize(mapload)
|
||||
. = ..()
|
||||
src.air_contents.adjust_gas_temp(GAS_N2, (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*TN60C), TN60C)
|
||||
|
||||
/*
|
||||
* Methane
|
||||
*/
|
||||
/obj/item/tank/methane
|
||||
name = "methane tank"
|
||||
desc = "A tank of methane."
|
||||
icon_state = "methane"
|
||||
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
|
||||
|
||||
/obj/item/tank/methane/Initialize(mapload)
|
||||
. = ..()
|
||||
src.air_contents.adjust_gas(GAS_CH4, (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
/obj/item/tank/methane/examine(mob/user)
|
||||
. = ..()
|
||||
if(loc == user && (air_contents.gas[GAS_CH4] < 10))
|
||||
. += span_danger("The meter on \the [src] indicates you are almost out of methane!")
|
||||
//playsound(user, 'sound/effects/alert.ogg', 50, 1)
|
||||
|
||||
/*
|
||||
* Emergency CO2
|
||||
*/
|
||||
/obj/item/tank/emergency/carbon_dioxide
|
||||
name = "emergency carbon dioxide tank"
|
||||
desc = "An emergency air tank hastily painted yellow."
|
||||
icon_state = "emergency_tst"
|
||||
gauge_icon = "indicator_emergency"
|
||||
|
||||
/obj/item/tank/emergency/carbon_dioxide/Initialize(mapload)
|
||||
. = ..()
|
||||
src.air_contents.adjust_gas(GAS_CO2, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
/*
|
||||
* Emergency Methane
|
||||
*/
|
||||
/obj/item/tank/emergency/methane
|
||||
name = "emergency methane tank"
|
||||
desc = "An emergency air tank hastily painted green."
|
||||
icon_state = "emergency_methane"
|
||||
gauge_icon = "indicator_emergency"
|
||||
gauge_cap = 3
|
||||
|
||||
/obj/item/tank/emergency/methane/Initialize(mapload)
|
||||
. = ..()
|
||||
src.air_contents.adjust_gas(GAS_CH4, (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
@@ -1040,6 +1040,12 @@
|
||||
desc = "WARNING! O2 flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_o2"
|
||||
|
||||
/obj/structure/sign/atmos_ch4
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
name = "CH4 warning sign"
|
||||
desc = "WARNING! CH4 flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_ch4"
|
||||
|
||||
/obj/structure/sign/atmos_air
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
name = "Air warning sign"
|
||||
|
||||
@@ -335,11 +335,12 @@
|
||||
/turf/simulated/floor/reinforced/n20
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
nitrous_oxide = ATMOSTANK_NITROUSOXIDE
|
||||
|
||||
/turf/simulated/floor/reinforced/n20/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!air) make_air()
|
||||
air.adjust_gas(GAS_N2O, ATMOSTANK_NITROUSOXIDE)
|
||||
/turf/simulated/floor/reinforced/methane
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
methane = ATMOSTANK_METHANE
|
||||
|
||||
/turf/simulated/floor/cult
|
||||
name = "engraved floor"
|
||||
|
||||
@@ -119,10 +119,23 @@
|
||||
. = ..()
|
||||
. += "A fresh breeze blows through it."
|
||||
|
||||
/turf/simulated/floor/gas_crack/methane
|
||||
gas_type = list(GAS_CH4)
|
||||
methane = 250
|
||||
|
||||
/turf/simulated/floor/gas_crack/methane/pump_reagents(var/datum/reagents/R, var/volume)
|
||||
. = ..()
|
||||
R.add_reagent(REAGENT_ID_SULFUR, round(volume / 2, 0.1))
|
||||
R.add_reagent(REAGENT_ID_PHOSPHORUS, round(volume / 2, 0.1))
|
||||
|
||||
/turf/simulated/floor/gas_crack/methane/examine(mob/user)
|
||||
. = ..()
|
||||
. += "A terrible smell wafts from beneath it."
|
||||
|
||||
|
||||
/turf/simulated/floor/gas_crack/terrible
|
||||
gas_type = list(GAS_CO2,GAS_PHORON,GAS_N2O)
|
||||
carbon_dioxide = 250
|
||||
methane = 250
|
||||
phoron = 250
|
||||
|
||||
/turf/simulated/floor/gas_crack/terrible/pump_reagents(var/datum/reagents/R, var/volume)
|
||||
@@ -157,8 +170,10 @@
|
||||
gas_type.Add(GAS_O2)
|
||||
if(prob(15))
|
||||
gas_type.Add(GAS_N2)
|
||||
if(prob(15))
|
||||
gas_type.Add(GAS_CH4)
|
||||
if(!gas_type.len)
|
||||
gas_type.Add(pick(list(GAS_CO2,GAS_PHORON,GAS_N2O,GAS_O2,GAS_N2)))
|
||||
gas_type.Add(pick(list(GAS_CO2,GAS_PHORON,GAS_N2O,GAS_O2,GAS_N2,GAS_CH4)))
|
||||
// Set fracking reagent
|
||||
add_random_reagent()
|
||||
if(prob(60))
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
var/carbon_dioxide = 0
|
||||
var/nitrogen = 0
|
||||
var/phoron = 0
|
||||
var/nitrous_oxide = 0
|
||||
var/methane = 0
|
||||
|
||||
//CHOMPEdit Begin
|
||||
//* Movement / Pathfinding
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
icon_state = "hazard"
|
||||
blood_overlay_type = "armor"
|
||||
allowed = list (/obj/item/analyzer, /obj/item/flashlight, /obj/item/multitool, /obj/item/pipe_painter, /obj/item/radio, /obj/item/t_scanner,
|
||||
/obj/item/tool/crowbar, /obj/item/tool/screwdriver, /obj/item/weldingtool, /obj/item/tool/wirecutters, /obj/item/tool/wrench, /obj/item/tank/emergency/oxygen,
|
||||
/obj/item/tool/crowbar, /obj/item/tool/screwdriver, /obj/item/weldingtool, /obj/item/tool/wirecutters, /obj/item/tool/wrench, /obj/item/tank/emergency,
|
||||
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/taperoll/atmos, /obj/item/analyzer, /obj/item/extinguisher/mini) //VOREStation edit. Few more tools that can be put on vests
|
||||
body_parts_covered = UPPER_TORSO
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 20)
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
var/gas_choices = list(GAS_CO2, GAS_N2O) // Annoying
|
||||
if(severity >= EVENT_LEVEL_MODERATE)
|
||||
gas_choices += GAS_PHORON // Dangerous
|
||||
gas_choices += GAS_CH4
|
||||
// if(severity >= EVENT_LEVEL_MAJOR)
|
||||
// gas_choices += GAS_VOLATILE_FUEL // Dangerous and no default atmos setup!
|
||||
gas_type = pick(gas_choices)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
|
||||
/datum/event2/event/gas_leak
|
||||
var/potential_gas_choices = list(GAS_CO2, GAS_N2O, GAS_PHORON, GAS_VOLATILE_FUEL)
|
||||
var/potential_gas_choices = list(GAS_CO2, GAS_N2O, GAS_PHORON, GAS_VOLATILE_FUEL, GAS_CH4)
|
||||
var/chosen_gas = null
|
||||
var/turf/chosen_turf = null
|
||||
|
||||
|
||||
@@ -448,12 +448,12 @@
|
||||
|
||||
if(prob(5))
|
||||
consume_gasses = list()
|
||||
var/gas = pick(GAS_O2,GAS_N2,GAS_PHORON,GAS_CO2)
|
||||
var/gas = pick(GAS_O2,GAS_N2,GAS_PHORON,GAS_CO2,GAS_CH4)
|
||||
consume_gasses[gas] = rand(3,9)
|
||||
|
||||
if(prob(5))
|
||||
exude_gasses = list()
|
||||
var/gas = pick(GAS_O2,GAS_N2,GAS_PHORON,GAS_CO2)
|
||||
var/gas = pick(GAS_O2,GAS_N2,GAS_PHORON,GAS_CO2,GAS_CH4)
|
||||
exude_gasses[gas] = rand(3,9)
|
||||
|
||||
chems = list()
|
||||
|
||||
@@ -810,13 +810,14 @@
|
||||
complexity = 9
|
||||
inputs = list()
|
||||
outputs = list(
|
||||
"pressure" = IC_PINTYPE_NUMBER,
|
||||
"temperature" = IC_PINTYPE_NUMBER,
|
||||
GAS_O2 = IC_PINTYPE_NUMBER,
|
||||
GAS_N2 = IC_PINTYPE_NUMBER,
|
||||
GAS_CO2 = IC_PINTYPE_NUMBER,
|
||||
GAS_PHORON = IC_PINTYPE_NUMBER,
|
||||
"other" = IC_PINTYPE_NUMBER
|
||||
"pressure" = IC_PINTYPE_NUMBER,
|
||||
"temperature" = IC_PINTYPE_NUMBER,
|
||||
GAS_O2 = IC_PINTYPE_NUMBER,
|
||||
GAS_N2 = IC_PINTYPE_NUMBER,
|
||||
GAS_CO2 = IC_PINTYPE_NUMBER,
|
||||
GAS_CH4 = IC_PINTYPE_NUMBER,
|
||||
GAS_PHORON = IC_PINTYPE_NUMBER,
|
||||
"other" = IC_PINTYPE_NUMBER
|
||||
)
|
||||
activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
@@ -836,15 +837,17 @@
|
||||
var/o2_level = environment.gas[GAS_O2]/total_moles
|
||||
var/n2_level = environment.gas[GAS_N2]/total_moles
|
||||
var/co2_level = environment.gas[GAS_CO2]/total_moles
|
||||
var/methane_level = environment.gas[GAS_CH4]/total_moles
|
||||
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level+methane_level)
|
||||
set_pin_data(IC_OUTPUT, 1, pressure)
|
||||
set_pin_data(IC_OUTPUT, 2, round(environment.temperature-T0C,0.1))
|
||||
set_pin_data(IC_OUTPUT, 3, round(o2_level*100,0.1))
|
||||
set_pin_data(IC_OUTPUT, 4, round(n2_level*100,0.1))
|
||||
set_pin_data(IC_OUTPUT, 5, round(co2_level*100,0.1))
|
||||
set_pin_data(IC_OUTPUT, 6, round(phoron_level*100,0.01))
|
||||
set_pin_data(IC_OUTPUT, 7, round(unknown_level, 0.01))
|
||||
set_pin_data(IC_OUTPUT, 7, round(methane_level*100,0.01))
|
||||
set_pin_data(IC_OUTPUT, 8, round(unknown_level, 0.01))
|
||||
else
|
||||
set_pin_data(IC_OUTPUT, 1, 0)
|
||||
set_pin_data(IC_OUTPUT, 2, -273.15)
|
||||
@@ -853,6 +856,7 @@
|
||||
set_pin_data(IC_OUTPUT, 5, 0)
|
||||
set_pin_data(IC_OUTPUT, 6, 0)
|
||||
set_pin_data(IC_OUTPUT, 7, 0)
|
||||
set_pin_data(IC_OUTPUT, 8, 0)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
@@ -1034,3 +1038,33 @@
|
||||
set_pin_data(IC_OUTPUT, 1, 0)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
/obj/item/integrated_circuit/input/methane_sensor
|
||||
name = "integrated methane sensor"
|
||||
desc = "A tiny methane gas sensor module similar to that found in a PDA atmosphere analyser."
|
||||
icon_state = "medscan_adv"
|
||||
complexity = 3
|
||||
inputs = list()
|
||||
outputs = list(
|
||||
GAS_CH4 = IC_PINTYPE_NUMBER
|
||||
)
|
||||
activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_RESEARCH
|
||||
origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3)
|
||||
power_draw_per_use = 20
|
||||
|
||||
/obj/item/integrated_circuit/input/methane_sensor/do_work()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(T)) //Invalid input
|
||||
return
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
|
||||
var/total_moles = environment.total_moles
|
||||
|
||||
if (total_moles)
|
||||
var/methane_level = environment.gas[GAS_CH4]/total_moles
|
||||
set_pin_data(IC_OUTPUT, 1, round(methane_level*100, 0.1))
|
||||
else
|
||||
set_pin_data(IC_OUTPUT, 1, 0)
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
@@ -587,6 +587,7 @@
|
||||
safe_pressure_min *= 1.25
|
||||
|
||||
var/safe_exhaled_max = 10
|
||||
var/safe_toxins_min = 0.05
|
||||
var/safe_toxins_max = 0.2
|
||||
var/SA_para_min = 1
|
||||
var/SA_sleep_min = 5
|
||||
@@ -595,7 +596,8 @@
|
||||
var/breath_pressure = (breath.total_moles*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
|
||||
|
||||
var/inhaling
|
||||
var/poison
|
||||
var/poison_toxin
|
||||
var/poison_methane
|
||||
var/exhaling
|
||||
|
||||
var/breath_type
|
||||
@@ -615,7 +617,10 @@
|
||||
poison_type = species.poison_type
|
||||
else
|
||||
poison_type = GAS_PHORON
|
||||
poison = breath.gas[poison_type]
|
||||
poison_toxin = breath.gas[poison_type]
|
||||
|
||||
if(species.breath_type != GAS_CH4)
|
||||
poison_methane = breath.gas[GAS_CH4]
|
||||
|
||||
if(species.exhale_type)
|
||||
exhale_type = species.exhale_type
|
||||
@@ -624,14 +629,15 @@
|
||||
exhaling = 0
|
||||
|
||||
var/inhale_pp = (inhaling/breath.total_moles)*breath_pressure
|
||||
var/toxins_pp = (poison/breath.total_moles)*breath_pressure
|
||||
var/toxins_pp = (poison_toxin/breath.total_moles)*breath_pressure
|
||||
var/methane_pp = (poison_methane/breath.total_moles)*breath_pressure
|
||||
// To be clear, this isn't how much they're exhaling -- it's the amount of the species exhale_gas that they just
|
||||
var/exhaled_pp = (exhaling/breath.total_moles)*breath_pressure
|
||||
|
||||
// Not enough to breathe
|
||||
if(inhale_pp < safe_pressure_min)
|
||||
if(prob(20))
|
||||
spawn(0) emote("gasp")
|
||||
emote("gasp")
|
||||
if(is_below_sound_pressure(get_turf(src))) //No more popped lungs from choking/drowning. You also have ~20 seconds to get internals on before your lungs pop.
|
||||
rupture_lung(TRUE)
|
||||
|
||||
@@ -649,6 +655,8 @@
|
||||
throw_alert("oxy", /obj/screen/alert/not_enough_nitro)
|
||||
if(GAS_CO2)
|
||||
throw_alert("oxy", /obj/screen/alert/not_enough_co2)
|
||||
if(GAS_CH4)
|
||||
throw_alert("oxy", /obj/screen/alert/not_enough_methane)
|
||||
if(GAS_VOLATILE_FUEL)
|
||||
throw_alert("oxy", /obj/screen/alert/not_enough_fuel)
|
||||
if(GAS_N2O)
|
||||
@@ -692,16 +700,38 @@
|
||||
var/word = pick("a little dizzy","short of breath")
|
||||
to_chat(src, span_warning("You feel [word]."))
|
||||
|
||||
// Too much poison in the air.
|
||||
// Too much phoron in the air.
|
||||
if(toxins_pp > safe_toxins_min)
|
||||
var/SA_pp = (breath.gas[GAS_PHORON] / breath.total_moles) * breath_pressure
|
||||
if(SA_pp > 0.05)
|
||||
if(prob(3))
|
||||
to_chat(src,span_warning("Something burns as you breathe."))
|
||||
if(toxins_pp > safe_toxins_max)
|
||||
var/ratio = (poison/safe_toxins_max) * 10
|
||||
var/ratio = (poison_toxin/safe_toxins_max) * 10
|
||||
if(reagents)
|
||||
reagents.add_reagent(REAGENT_ID_TOXIN, CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
|
||||
breath.adjust_gas(poison_type, -poison/6, update = 0) //update after
|
||||
breath.adjust_gas(poison_type, -poison_toxin/6, update = 0) //update after
|
||||
throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
|
||||
else
|
||||
clear_alert("tox_in_air")
|
||||
|
||||
// Too much methane in the air
|
||||
if(methane_pp > safe_toxins_min)
|
||||
var/SA_pp = (breath.gas[GAS_CH4] / breath.total_moles) * breath_pressure
|
||||
if(SA_pp > 0.05)
|
||||
if(prob(5))
|
||||
to_chat(src,span_warning("You smell rotten eggs."))
|
||||
if(methane_pp > safe_toxins_max)
|
||||
var/ratio = (poison_methane/safe_toxins_max) * 1200
|
||||
adjustOxyLoss(CLAMP(ratio,0.1,10)) // Causes slow suffocation
|
||||
if(prob(20))
|
||||
emote("gasp")
|
||||
breath.adjust_gas(GAS_CH4, -poison_methane/6, update = 0) //update after
|
||||
breath.adjust_gas(GAS_CH4, -breath.gas[GAS_CH4]/6, update = 0) //update after
|
||||
throw_alert("methane_in_air", /obj/screen/alert/methane_in_air)
|
||||
else
|
||||
clear_alert("methane_in_air")
|
||||
|
||||
// If there's some other shit in the air lets deal with it here.
|
||||
if(breath.gas[GAS_N2O])
|
||||
var/SA_pp = (breath.gas[GAS_N2O] / breath.total_moles) * breath_pressure
|
||||
@@ -719,7 +749,7 @@
|
||||
// There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
else if(SA_pp > 0.15)
|
||||
if(prob(20))
|
||||
spawn(0) emote(pick("giggle", "laugh"))
|
||||
emote(pick("giggle", "laugh"))
|
||||
breath.adjust_gas(GAS_N2O, -breath.gas[GAS_N2O]/6, update = 0) //update after
|
||||
|
||||
if(get_hallucination_component()?.get_hud_state() == HUD_HALLUCINATION_OXY)
|
||||
@@ -1317,13 +1347,12 @@
|
||||
badorgan.damage -= 1
|
||||
|
||||
handle_dreams()
|
||||
if (mind)
|
||||
if(mind)
|
||||
//Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar.
|
||||
if(client || sleeping > 3)
|
||||
handle_sleeping()
|
||||
if( prob(2) && health && !get_hallucination_component()?.get_fakecrit() && client )
|
||||
spawn(0)
|
||||
emote("snore")
|
||||
if(prob(2) && health && !get_hallucination_component()?.get_fakecrit() && client)
|
||||
emote("snore")
|
||||
//CONSCIOUS
|
||||
else
|
||||
set_stat(CONSCIOUS)
|
||||
|
||||
@@ -189,6 +189,10 @@
|
||||
desc = "You breathe nitrogen instead of oxygen (which is poisonous to you). Incidentally, phoron isn't poisonous to breathe to you."
|
||||
var_changes = list("breath_type" = GAS_N2, "poison_type" = GAS_O2, "ideal_air_type" = /datum/gas_mixture/belly_air/nitrogen_breather)
|
||||
|
||||
/datum/trait/negative/breathes/methane
|
||||
name = "Methane Breather"
|
||||
desc = "You breathe methane instead of oxygen (which is poisonous to you)."
|
||||
var_changes = list("breath_type" = GAS_CH4, "poison_type" = GAS_O2, "ideal_air_type" = /datum/gas_mixture/belly_air/methane_breather)
|
||||
|
||||
/datum/trait/negative/monolingual
|
||||
name = "Monolingual"
|
||||
|
||||
@@ -332,41 +332,7 @@
|
||||
|
||||
/datum/pai_software/atmosphere_sensor/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
var/list/results = list()
|
||||
var/turf/T = get_turf(user)
|
||||
if(!isnull(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
if (total_moles)
|
||||
var/o2_level = environment.gas[GAS_O2]/total_moles
|
||||
var/n2_level = environment.gas[GAS_N2]/total_moles
|
||||
var/co2_level = environment.gas[GAS_CO2]/total_moles
|
||||
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
|
||||
// entry is what the element is describing
|
||||
// Type identifies which unit or other special characters to use
|
||||
// Val is the information reported
|
||||
// Bad_high/_low are the values outside of which the entry reports as dangerous
|
||||
// Poor_high/_low are the values outside of which the entry reports as unideal
|
||||
// Values were extracted from the template itself
|
||||
results = list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "°C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
)
|
||||
|
||||
if(isnull(results))
|
||||
results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
|
||||
|
||||
data["aircontents"] = results
|
||||
|
||||
data["aircontents"] = get_gas_mixture_default_scan_data(get_turf(user))
|
||||
return data
|
||||
|
||||
/datum/pai_software/pai_hud
|
||||
|
||||
@@ -161,6 +161,15 @@
|
||||
else
|
||||
clear_alert("co2")
|
||||
|
||||
if(min_ch4 && Environment.gas[GAS_CH4] < min_ch4)
|
||||
atmos_unsuitable = 2
|
||||
throw_alert("methane_in_air", /obj/screen/alert/not_enough_methane)
|
||||
else if(max_tox && Environment.gas[GAS_CH4] > max_ch4)
|
||||
atmos_unsuitable = 2
|
||||
throw_alert("methane_in_air", /obj/screen/alert/methane_in_air)
|
||||
else
|
||||
clear_alert("methane_in_air")
|
||||
|
||||
//Atmos effect
|
||||
if(bodytemperature < minbodytemp)
|
||||
adjustFireLoss(cold_damage_per_tick)
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
var/max_co2 = 5 // CO2 max
|
||||
var/min_n2 = 0 // N2 min
|
||||
var/max_n2 = 0 // N2 max
|
||||
var/min_ch4 = 0 // CH4 min
|
||||
var/max_ch4 = 5 // CH4 max
|
||||
var/unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above
|
||||
|
||||
//Hostility settings
|
||||
|
||||
@@ -222,39 +222,7 @@
|
||||
category = "Utilities"
|
||||
|
||||
/datum/data/pda/app/atmos_scanner/update_ui(mob/user as mob, list/data)
|
||||
var/list/results = list()
|
||||
var/turf/T = get_turf(user)
|
||||
if(!isnull(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
if (total_moles)
|
||||
var/o2_level = environment.gas[GAS_O2]/total_moles
|
||||
var/n2_level = environment.gas[GAS_N2]/total_moles
|
||||
var/co2_level = environment.gas[GAS_CO2]/total_moles
|
||||
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
|
||||
// entry is what the element is describing
|
||||
// Type identifies which unit or other special characters to use
|
||||
// Val is the information reported
|
||||
// Bad_high/_low are the values outside of which the entry reports as dangerous
|
||||
// Poor_high/_low are the values outside of which the entry reports as unideal
|
||||
// Values were extracted from the template itself
|
||||
results = list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "\u00B0C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
)
|
||||
|
||||
if(isnull(results))
|
||||
results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
|
||||
|
||||
data["aircontents"] = results
|
||||
data["aircontents"] = get_gas_mixture_default_scan_data(get_turf(user))
|
||||
|
||||
/datum/data/pda/app/news
|
||||
name = "News"
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
var/co2_amt = Tank.air_contents.gas[GAS_CO2]
|
||||
var/oxy_amt = Tank.air_contents.gas[GAS_O2]
|
||||
var/n2o_amt = Tank.air_contents.gas[GAS_N2O]
|
||||
var/ch4_amt = Tank.air_contents.gas[GAS_CH4]
|
||||
|
||||
if(isnull(co2_amt))
|
||||
co2_amt = 0
|
||||
@@ -48,8 +49,11 @@
|
||||
if(isnull(n2o_amt))
|
||||
n2o_amt = 0
|
||||
|
||||
if(isnull(ch4_amt))
|
||||
ch4_amt = 0
|
||||
|
||||
var/phoron_mix_proper = TRUE
|
||||
if(!phoron_amt || phoron_amt < max(0.25, 3 + co2_amt - oxy_amt - (n2o_amt / 2)))
|
||||
if( (!phoron_amt || phoron_amt < max(0.25, 3 + co2_amt - oxy_amt - (n2o_amt / 2))) && (!ch4_amt || ch4_amt < max(0.25, 3 + co2_amt - oxy_amt - (n2o_amt / 2))) )
|
||||
phoron_mix_proper = FALSE
|
||||
|
||||
if(Tank.air_contents.return_pressure() >= T.air.return_pressure() && phoron_mix_proper)
|
||||
|
||||
@@ -95,6 +95,21 @@
|
||||
rejects_xgm_gas = GAS_O2
|
||||
consumes_xgm_gas = CONDENSING_RATE
|
||||
|
||||
/decl/chemical_reaction/distilling/condense_methane
|
||||
name = "Condensing Methane"
|
||||
id = "condense_methane"
|
||||
result = REAGENT_ID_TOXIN
|
||||
required_reagents = list(REAGENT_ID_COOLANT = COOLANT_CONSUMPTION_RATE)
|
||||
inhibitors = list(REAGENT_ID_TOXIN = 0.1) // Used to limit the reaction
|
||||
result_amount = CONDENSING_RESULT
|
||||
|
||||
temp_range = list(90.7, 111.65) // kelvin
|
||||
temp_shift = CONDENSING_HEAT
|
||||
|
||||
require_xgm_gas = GAS_CH4
|
||||
rejects_xgm_gas = GAS_O2
|
||||
consumes_xgm_gas = CONDENSING_RATE
|
||||
|
||||
#undef CONDENSING_RATE
|
||||
#undef CONDENSING_RESULT
|
||||
#undef CONDENSING_HEAT
|
||||
|
||||
@@ -463,15 +463,17 @@
|
||||
var/n2_level = environment.gas[GAS_N2]/total_moles
|
||||
var/co2_level = environment.gas[GAS_CO2]/total_moles
|
||||
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
var/methane_level = environment.gas[GAS_CH4]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level+methane_level)
|
||||
aircontents = list(\
|
||||
"pressure" = "[round(pressure,0.1)]",\
|
||||
GAS_N2 = "[round(n2_level*100,0.1)]",\
|
||||
GAS_O2 = "[round(o2_level*100,0.1)]",\
|
||||
GAS_CO2 = "[round(co2_level*100,0.1)]",\
|
||||
GAS_PHORON = "[round(phoron_level*100,0.01)]",\
|
||||
"pressure" = "[round(pressure, 0.1)]",\
|
||||
GAS_N2 = "[round(n2_level*100, 0.1)]",\
|
||||
GAS_O2 = "[round(o2_level*100, 0.1)]",\
|
||||
GAS_CO2 = "[round(co2_level*100, 0.1)]",\
|
||||
GAS_PHORON = "[round(phoron_level*100, 0.01)]",\
|
||||
GAS_CH4 = "[round(methane_level*100, 0.01)]",\
|
||||
"other" = "[round(unknown_level, 0.01)]",\
|
||||
"temp" = "[round(environment.temperature-T0C,0.1)]",\
|
||||
"temp" = "[round(environment.temperature-T0C, 0.1)]",\
|
||||
"reading" = TRUE\
|
||||
)
|
||||
|
||||
|
||||
@@ -61,12 +61,14 @@
|
||||
data["SM_gas_CO2"] = round(100*air.gas[GAS_CO2]/air.total_moles,0.01)
|
||||
data["SM_gas_N2"] = round(100*air.gas[GAS_N2]/air.total_moles,0.01)
|
||||
data["SM_gas_PH"] = round(100*air.gas[GAS_PHORON]/air.total_moles,0.01)
|
||||
data["SM_gas_CH4"] = round(100*air.gas[GAS_CH4]/air.total_moles,0.01)
|
||||
data["SM_gas_N2O"] = round(100*air.gas["sleeping_agent"]/air.total_moles,0.01)
|
||||
else
|
||||
data["SM_gas_O2"] = 0
|
||||
data["SM_gas_CO2"] = 0
|
||||
data["SM_gas_N2"] = 0
|
||||
data["SM_gas_PH"] = 0
|
||||
data["SM_gas_CH4"] = 0
|
||||
data["SM_gas_N2O"] = 0
|
||||
else
|
||||
var/list/SMS = list()
|
||||
|
||||
@@ -753,6 +753,16 @@
|
||||
gas = list(
|
||||
GAS_CO2 = 100)
|
||||
|
||||
/datum/gas_mixture/belly_air/methane_breather
|
||||
volume = 2500
|
||||
temperature = 293.150
|
||||
total_moles = 104
|
||||
|
||||
/datum/gas_mixture/belly_air/methane_breather/New()
|
||||
. = ..()
|
||||
gas = list(
|
||||
GAS_CH4 = 100)
|
||||
|
||||
/mob/living/proc/feed_grabbed_to_self_falling_nom(var/mob/living/user, var/mob/living/prey)
|
||||
if(user.is_incorporeal())
|
||||
return FALSE
|
||||
|
||||
@@ -490,3 +490,36 @@
|
||||
/datum/gas_mixture/proc/get_mass()
|
||||
for(var/g in gas)
|
||||
. += gas[g] * GLOB.gas_data.molar_mass[g] * group_multiplier
|
||||
|
||||
// Global proc in this file so we can check for null turfs too
|
||||
// This was copypastaed three times for multiple gas sensors checking for default safe atmos... Lets not.
|
||||
/proc/get_gas_mixture_default_scan_data(var/turf/T)
|
||||
if(isturf(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
if(total_moles)
|
||||
var/o2_level = environment.gas[GAS_O2]/total_moles
|
||||
var/n2_level = environment.gas[GAS_N2]/total_moles
|
||||
var/co2_level = environment.gas[GAS_CO2]/total_moles
|
||||
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
|
||||
var/methane_level = environment.gas[GAS_CH4]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level+methane_level)
|
||||
|
||||
// entry is what the element is describing
|
||||
// Type identifies which unit or other special characters to use
|
||||
// Val is the information reported
|
||||
// Bad_high/_low are the values outside of which the entry reports as dangerous
|
||||
// Poor_high/_low are the values outside of which the entry reports as unideal
|
||||
// Values were extracted from the template itself
|
||||
return list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure, 0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "°C", "val" = "[round(environment.temperature-T0C, 0.1)]","bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = GASNAME_O2, "units" = "kPa", "val" = "[round(o2_level*100, 0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = GASNAME_N2, "units" = "kPa", "val" = "[round(n2_level*100, 0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = GASNAME_CO2, "units" = "kPa", "val" = "[round(co2_level*100, 0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = GASNAME_PHORON, "units" = "kPa", "val" = "[round(phoron_level*100, 0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = GASNAME_CH4, "units" = "kPa", "val" = "[round(methane_level*100, 0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
)
|
||||
return list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
|
||||
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.7 KiB |
@@ -227,6 +227,12 @@ const GASES = [
|
||||
label: 'N₂O',
|
||||
color: 'red',
|
||||
},
|
||||
{
|
||||
id: 'methane',
|
||||
name: 'Methane',
|
||||
label: 'CH₄',
|
||||
color: 'orange',
|
||||
},
|
||||
{
|
||||
id: 'other',
|
||||
name: 'Other',
|
||||
|
||||
@@ -251,6 +251,9 @@ export const ShuttleControlConsoleWeb = (props) => {
|
||||
<LabeledList.Item label="Phoron">
|
||||
{sensor.phoron}%
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Methane">
|
||||
{sensor.methane}%
|
||||
</LabeledList.Item>
|
||||
{(sensor.other && (
|
||||
<LabeledList.Item label="Other">
|
||||
{sensor.other}%
|
||||
|
||||
@@ -61,6 +61,7 @@ export type sensor = {
|
||||
oxygen: string;
|
||||
carbon_dioxide: string;
|
||||
phoron: string;
|
||||
methane: string;
|
||||
other: string;
|
||||
temp: string;
|
||||
reading: BooleanLike;
|
||||
|
||||
@@ -25,6 +25,7 @@ type Data = {
|
||||
SM_gas_N2: number;
|
||||
SM_gas_PH: number;
|
||||
SM_gas_N2O: number;
|
||||
SM_gas_CH4: number;
|
||||
supermatters: { area_name: string; integrity: number; uid: number }[];
|
||||
};
|
||||
|
||||
@@ -103,6 +104,7 @@ const SupermatterMonitorActive = (props) => {
|
||||
SM_gas_N2,
|
||||
SM_gas_PH,
|
||||
SM_gas_N2O,
|
||||
SM_gas_CH4,
|
||||
} = data;
|
||||
|
||||
return (
|
||||
@@ -193,6 +195,9 @@ const SupermatterMonitorActive = (props) => {
|
||||
<LabeledList.Item label="N²O">
|
||||
<AnimatedNumber value={SM_gas_N2O} />%
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="CH₄">
|
||||
<AnimatedNumber value={SM_gas_CH4} />%
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
|
||||
@@ -398,7 +398,6 @@
|
||||
#include "code\ATMOSPHERICS\components\unary\unary_base.dm"
|
||||
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
|
||||
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
|
||||
#include "code\ATMOSPHERICS\components\unary\vent_scrubber_vr.dm"
|
||||
#include "code\ATMOSPHERICS\pipes\cap.dm"
|
||||
#include "code\ATMOSPHERICS\pipes\he_pipes.dm"
|
||||
#include "code\ATMOSPHERICS\pipes\he_pipes_vr.dm"
|
||||
|
||||