caches gases in more procs

This commit is contained in:
duncathan
2015-12-28 13:32:49 -06:00
parent b18cb5fca8
commit a64b68f76c
16 changed files with 112 additions and 94 deletions
+8 -7
View File
@@ -155,6 +155,7 @@ var/const/SPAWN_AIR = 256
return
var/datum/gas_mixture/G = new
var/list/new_gases = G.gases
if(flag & SPAWN_20C)
G.temperature = T20C
@@ -163,20 +164,20 @@ var/const/SPAWN_AIR = 256
G.temperature += 1000
if(flag & SPAWN_TOXINS)
G.gases[GAS_PL][MOLES] += amount
new_gases[GAS_PL][MOLES] += amount
if(flag & SPAWN_OXYGEN)
G.gases[GAS_O2][MOLES] += amount
new_gases[GAS_O2][MOLES] += amount
if(flag & SPAWN_CO2)
G.gases[GAS_CO2][MOLES] += amount
new_gases[GAS_CO2][MOLES] += amount
if(flag & SPAWN_NITROGEN)
G.gases[GAS_N2][MOLES] += amount
new_gases[GAS_N2][MOLES] += amount
if(flag & SPAWN_N2O)
G.gases[GAS_N2O][MOLES] += amount
new_gases[GAS_N2O][MOLES] += amount
if(flag & SPAWN_AIR)
G.gases[GAS_O2][MOLES] += MOLES_O2STANDARD * amount
G.gases[GAS_N2][MOLES] += MOLES_N2STANDARD * amount
new_gases[GAS_O2][MOLES] += MOLES_O2STANDARD * amount
new_gases[GAS_N2][MOLES] += MOLES_N2STANDARD * amount
air.merge(G)
SSair.add_to_active(src, 0)
+2 -1
View File
@@ -314,12 +314,13 @@
/datum/excited_group/proc/self_breakdown()
var/datum/gas_mixture/A = new
var/list/A_gases = A.gases
for(var/turf/simulated/T in turf_list)
A.merge(T.air)
for(var/turf/simulated/T in turf_list)
for(var/gas in T.air.gases)
gas[MOLES] = A.gases[gas[GAS_INDEX]][MOLES]/turf_list.len
gas[MOLES] = A_gases[gas[GAS_INDEX]][MOLES]/turf_list.len
T.update_visuals()
+3 -5
View File
@@ -84,7 +84,7 @@ var/list/cached_gases_list
src.volume = volume
if(!cached_gases_list)
cached_gases_list = gaseslist()
gases = cached_gases_list
gases = cached_gases_list.Copy()
//PV=nRT - related procedures
/datum/gas_mixture/proc/heat_capacity()
@@ -120,7 +120,7 @@ var/list/cached_gases_list
/datum/gas_mixture/proc/react(atom/dump_location)
var/procgases = gases //this speeds things up because >byond
var/list/procgases = gases //this speeds things up because >byond
var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network)
if(temperature < TCMB)
temperature = TCMB
@@ -253,12 +253,10 @@ var/list/cached_gases_list
/datum/gas_mixture/proc/check_turf(turf/model)
//Returns: 0 if self-check failed or 1 if check passes
//datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient) //I want this proc to die a painful death
/datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient) //I want this proc to die a painful death
/datum/gas_mixture/proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient)
/datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient)
/datum/gas_mixture/proc/temperature_turf_share(turf/simulated/sharer, conduction_coefficient)
/datum/gas_mixture/proc/compare(datum/gas_mixture/sample)
@@ -290,12 +290,13 @@
var/turf/simulated/floor/F = random_location
if(F.air)
var/datum/gas_mixture/A = F.air
var/list/A_gases = A.gases
var/trace_gases
for(var/i in 5 to A.gases.len)
if(A.gases[i][MOLES])
for(var/i in 5 to A_gases.len)
if(A_gases[i][MOLES])
trace_gases = TRUE
break
if(A.gases[GAS_O2][MOLES] >= 16 && !A.gases[GAS_PL][MOLES] && A.gases[GAS_CO2][MOLES] < 10 && !trace_gases)//Can most things breathe in this location?
if(A_gases[GAS_O2][MOLES] >= 16 && !A_gases[GAS_PL][MOLES] && A_gases[GAS_CO2][MOLES] < 10 && !trace_gases)//Can most things breathe in this location?
if((A.temperature > 270) && (A.temperature < 360))//Not too hot, not too cold
var/pressure = A.return_pressure()
if((pressure > 20) && (pressure < 550))//Account for crushing pressure or vaccuums
+17 -15
View File
@@ -257,6 +257,7 @@
if(!location)
return
var/datum/gas_mixture/environment = location.return_air()
var/list/env_gases = environment.gases
var/total = environment.total_moles()
var/list/environment_data = list()
@@ -273,25 +274,25 @@
environment_data += list(list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_danger))
cur_tlv = TLV["oxygen"]
var/oxygen_danger = cur_tlv.get_danger_level(environment.gases[GAS_O2][MOLES]*partial_pressure)
environment_data += list(list("name" = "Oxygen", "value" = environment.gases[GAS_O2][MOLES] / total * 100, "unit" = "%", "danger_level" = oxygen_danger))
var/oxygen_danger = cur_tlv.get_danger_level(env_gases[GAS_O2][MOLES]*partial_pressure)
environment_data += list(list("name" = "Oxygen", "value" = env_gases[GAS_O2][MOLES] / total * 100, "unit" = "%", "danger_level" = oxygen_danger))
cur_tlv = TLV["nitrogen"]
var/nitrogen_danger = cur_tlv.get_danger_level(environment.gases[GAS_N2][MOLES]*partial_pressure)
environment_data += list(list("name" = "Nitrogen", "value" = environment.gases[GAS_N2][MOLES] / total * 100, "unit" = "%", "danger_level" = nitrogen_danger))
var/nitrogen_danger = cur_tlv.get_danger_level(env_gases[GAS_N2][MOLES]*partial_pressure)
environment_data += list(list("name" = "Nitrogen", "value" = env_gases[GAS_N2][MOLES] / total * 100, "unit" = "%", "danger_level" = nitrogen_danger))
cur_tlv = TLV["carbon dioxide"]
var/carbon_dioxide_danger = cur_tlv.get_danger_level(environment.gases[GAS_CO2][MOLES]*partial_pressure)
environment_data += list(list("name" = "Carbon Dioxide", "value" = environment.gases[GAS_CO2][MOLES] / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger))
var/carbon_dioxide_danger = cur_tlv.get_danger_level(env_gases[GAS_CO2][MOLES]*partial_pressure)
environment_data += list(list("name" = "Carbon Dioxide", "value" = env_gases[GAS_CO2][MOLES] / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger))
cur_tlv = TLV["plasma"]
var/plasma_danger = cur_tlv.get_danger_level(environment.gases[GAS_PL][MOLES]*partial_pressure)
environment_data += list(list("name" = "Toxins", "value" = environment.gases[GAS_PL][MOLES] / total * 100, "unit" = "%", "danger_level" = plasma_danger))
var/plasma_danger = cur_tlv.get_danger_level(env_gases[GAS_PL][MOLES]*partial_pressure)
environment_data += list(list("name" = "Toxins", "value" = env_gases[GAS_PL][MOLES] / total * 100, "unit" = "%", "danger_level" = plasma_danger))
cur_tlv = TLV["other"]
var/other_moles = 0
for(var/i in 5 to environment.gases.len)
other_moles+=environment.gases[i][MOLES]
for(var/i in 5 to env_gases.len)
other_moles+=env_gases[i][MOLES]
var/other_danger = cur_tlv.get_danger_level(other_moles*partial_pressure)
environment_data += list(list("name" = "Other", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_danger))
@@ -603,6 +604,7 @@
return 0
var/datum/gas_mixture/environment = location.return_air()
var/list/env_gases = environment.gases
var/datum/tlv/cur_tlv
var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
@@ -612,18 +614,18 @@
var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure)
cur_tlv = TLV["oxygen"]
var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.gases[GAS_O2][MOLES]*GET_PP)
var/oxygen_dangerlevel = cur_tlv.get_danger_level(env_gases[GAS_O2][MOLES]*GET_PP)
cur_tlv = TLV["carbon dioxide"]
var/co2_dangerlevel = cur_tlv.get_danger_level(environment.gases[GAS_CO2][MOLES]*GET_PP)
var/co2_dangerlevel = cur_tlv.get_danger_level(env_gases[GAS_CO2][MOLES]*GET_PP)
cur_tlv = TLV["plasma"]
var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.gases[GAS_PL][MOLES]*GET_PP)
var/plasma_dangerlevel = cur_tlv.get_danger_level(env_gases[GAS_PL][MOLES]*GET_PP)
cur_tlv = TLV["other"]
var/other_moles = 0
for(var/i in 5 to environment.gases.len)
other_moles+=environment.gases[i][MOLES]
for(var/i in 5 to env_gases.len)
other_moles+=env_gases[i][MOLES]
var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP)
cur_tlv = TLV["temperature"]
+5 -4
View File
@@ -37,6 +37,7 @@
signal.data["timestamp"] = world.time
var/datum/gas_mixture/air_sample = return_air()
var/list/sample_gases = air_sample.gases
if(output&1)
signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1))
@@ -47,13 +48,13 @@
var/total_moles = air_sample.total_moles()
if(total_moles > 0)
if(output&4)
signal.data["oxygen"] = round(100*air_sample.gases[GAS_O2][MOLES]/total_moles,0.1)
signal.data["oxygen"] = round(100*sample_gases[GAS_O2][MOLES]/total_moles,0.1)
if(output&8)
signal.data["toxins"] = round(100*air_sample.gases[GAS_PL][MOLES]/total_moles,0.1)
signal.data["toxins"] = round(100*sample_gases[GAS_PL][MOLES]/total_moles,0.1)
if(output&16)
signal.data["nitrogen"] = round(100*air_sample.gases[GAS_N2][MOLES]/total_moles,0.1)
signal.data["nitrogen"] = round(100*sample_gases[GAS_N2][MOLES]/total_moles,0.1)
if(output&32)
signal.data["carbon_dioxide"] = round(100*air_sample.gases[GAS_CO2][MOLES]/total_moles,0.1)
signal.data["carbon_dioxide"] = round(100*sample_gases[GAS_CO2][MOLES]/total_moles,0.1)
else
signal.data["oxygen"] = 0
signal.data["toxins"] = 0
+10 -8
View File
@@ -72,21 +72,23 @@
//Filter it
if (removed)
var/datum/gas_mixture/filtered_out = new
var/list/filtered_gases = filtered_out.gases
var/list/removed_gases = removed.gases
filtered_out.temperature = removed.temperature
filtered_out.gases[GAS_PL][MOLES] = removed.gases[GAS_PL][MOLES]
removed.gases[GAS_PL][MOLES] = 0
filtered_gases[GAS_PL][MOLES] = removed_gases[GAS_PL][MOLES]
removed_gases[GAS_PL][MOLES] = 0
filtered_out.gases[GAS_CO2][MOLES] = removed.gases[GAS_CO2][MOLES]
removed.gases[GAS_CO2][MOLES] = 0
filtered_gases[GAS_CO2][MOLES] = removed_gases[GAS_CO2][MOLES]
removed_gases[GAS_CO2][MOLES] = 0
filtered_out.gases[GAS_AGENT_B][MOLES] = removed.gases[GAS_AGENT_B][MOLES]
removed.gases[GAS_AGENT_B][MOLES] = 0
filtered_gases[GAS_AGENT_B][MOLES] = removed_gases[GAS_AGENT_B][MOLES]
removed_gases[GAS_AGENT_B][MOLES] = 0
filtered_out.gases[GAS_N2O][MOLES] = removed.gases[GAS_N2O][MOLES]
removed.gases[GAS_AGENT_B][MOLES] = 0
filtered_gases[GAS_N2O][MOLES] = removed_gases[GAS_N2O][MOLES]
removed_gases[GAS_AGENT_B][MOLES] = 0
//Remix the resulting gases
air_contents.merge(filtered_out)
@@ -163,9 +163,10 @@
T.air_update_turf()
for(var/obj/effect/hotspot/H in T)
qdel(H)
if(G.gases[GAS_PL][MOLES])
G.gases[GAS_N2][MOLES] += (G.gases[GAS_PL][MOLES])
G.gases[GAS_PL][MOLES] = 0
var/list/G_gases = G.gases
if(G_gases[GAS_PL][MOLES])
G_gases[GAS_N2][MOLES] += (G_gases[GAS_PL][MOLES])
G_gases[GAS_PL][MOLES] = 0
for(var/obj/machinery/atmospherics/components/unary/U in T)
if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
U.welded = 1
+5 -4
View File
@@ -268,10 +268,11 @@ MASS SPECTROMETER
else
user.show_message("<span class='alert'>Pressure: [round(pressure,0.1)] kPa</span>", 1)
if(total_moles)
var/o2_concentration = environment.gases[GAS_O2][MOLES]/total_moles
var/n2_concentration = environment.gases[GAS_N2][MOLES]/total_moles
var/co2_concentration = environment.gases[GAS_CO2][MOLES]/total_moles
var/plasma_concentration = environment.gases[GAS_PL][MOLES]/total_moles
var/list/env_gases = environment.gases
var/o2_concentration = env_gases[GAS_O2][MOLES]/total_moles
var/n2_concentration = env_gases[GAS_N2][MOLES]/total_moles
var/co2_concentration = env_gases[GAS_CO2][MOLES]/total_moles
var/plasma_concentration = env_gases[GAS_PL][MOLES]/total_moles
if(abs(n2_concentration - N2STANDARD) < 20)
user.show_message("<span class='info'>Nitrogen: [round(n2_concentration*100)] %</span>", 1)
@@ -194,7 +194,7 @@
//TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this...
//Transfer 5% of current tank air contents to turf
var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount)
air_transfer.gases[GAS_PL][MOLES] = air_transfer.gases[GAS_PL][MOLES] * 5
air_transfer.gases[GAS_PL][MOLES] *= 5
target.assume_air(air_transfer)
//Burn it based on transfered gas
target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500)
+5 -3
View File
@@ -142,6 +142,7 @@
/turf/simulated/proc/Assimilate_Air()
if(air)
var/datum/gas_mixture/a_gas_mixture = new//Holders to assimilate air from nearby turfs
var/list/a_gases = a_gas_mixture.gases
var/turf_count = 0
for(var/direction in cardinal)//Only use cardinals to cut down on lag
@@ -152,12 +153,13 @@
else if(istype(T,/turf/simulated/floor))
var/turf/simulated/S = T
if(S.air)//Add the air's contents to the holders
for(var/gas in a_gas_mixture.gases)
gas[MOLES] += S.air.gases[gas[GAS_INDEX]][MOLES]
var/list/S_gases = S.air.gases
for(var/gas in a_gases)
gas[MOLES] += S_gases[gas[GAS_INDEX]][MOLES]
a_gas_mixture.temperature += S.air.temperature
turf_count ++
for(var/gas in air.gases)
gas[MOLES] = (a_gas_mixture.gases[gas[GAS_INDEX]][MOLES]/max(turf_count,1))//Averages contents of the turfs, ignoring walls and the like
gas[MOLES] = (a_gases[gas[GAS_INDEX]][MOLES]/max(turf_count,1))//Averages contents of the turfs, ignoring walls and the like
air.temperature = (a_gas_mixture.temperature/max(turf_count,1))//Trace gases can get bant
SSair.add_to_active(src)
+6 -5
View File
@@ -9,22 +9,23 @@
var/toxins_used = 0
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
var/list/breath_gases = breath.gases
//Partial pressure of the toxins in our breath
var/Toxins_pp = (breath.gases[GAS_PL][MOLES]/breath.total_moles())*breath_pressure
var/Toxins_pp = (breath_gases[GAS_PL][MOLES]/breath.total_moles())*breath_pressure
if(Toxins_pp) // Detect toxins in air
adjustPlasma(breath.gases[GAS_PL][MOLES]*250)
adjustPlasma(breath_gases[GAS_PL][MOLES]*250)
throw_alert("alien_tox", /obj/screen/alert/alien_tox)
toxins_used = breath.gases[GAS_PL][MOLES]
toxins_used = breath_gases[GAS_PL][MOLES]
else
clear_alert("alien_tox")
//Breathe in toxins and out oxygen
breath.gases[GAS_PL][MOLES] -= toxins_used
breath.gases[GAS_O2][MOLES] += toxins_used
breath_gases[GAS_PL][MOLES] -= toxins_used
breath_gases[GAS_O2][MOLES] += toxins_used
//BREATH TEMPERATURE
handle_breath_temperature(breath)
+20 -18
View File
@@ -1167,10 +1167,12 @@
var/gas_breathed = 0
var/list/breath_gases = breath.gases
//Partial pressures in our breath
var/O2_pp = breath.get_breath_partial_pressure(breath.gases[GAS_O2][MOLES])
var/Toxins_pp = breath.get_breath_partial_pressure(breath.gases[GAS_PL][MOLES])
var/CO2_pp = breath.get_breath_partial_pressure(breath.gases[GAS_CO2][MOLES])
var/O2_pp = breath.get_breath_partial_pressure(breath_gases[GAS_O2][MOLES])
var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases[GAS_PL][MOLES])
var/CO2_pp = breath.get_breath_partial_pressure(breath_gases[GAS_CO2][MOLES])
//-- OXY --//
@@ -1178,7 +1180,7 @@
//Too much oxygen! //Yes, some species may not like it.
if(safe_oxygen_max)
if(O2_pp > safe_oxygen_max && !(NOBREATH in specflags))
var/ratio = (breath.gases[GAS_O2][MOLES]/safe_oxygen_max) * 10
var/ratio = (breath_gases[GAS_O2][MOLES]/safe_oxygen_max) * 10
H.adjustOxyLoss(Clamp(ratio,oxy_breath_dam_min,oxy_breath_dam_max))
H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy)
else
@@ -1187,17 +1189,17 @@
//Too little oxygen!
if(safe_oxygen_min)
if(O2_pp < safe_oxygen_min)
gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath.gases[GAS_O2][MOLES])
gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath_gases[GAS_O2][MOLES])
H.throw_alert("oxy", /obj/screen/alert/oxy)
else
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
gas_breathed = breath.gases[GAS_O2][MOLES]/6
gas_breathed = breath_gases[GAS_O2][MOLES]/6
H.clear_alert("oxy")
//Exhale
breath.gases[GAS_O2][MOLES] -= gas_breathed
breath.gases[GAS_CO2][MOLES] += gas_breathed
breath_gases[GAS_O2][MOLES] -= gas_breathed
breath_gases[GAS_CO2][MOLES] += gas_breathed
gas_breathed = 0
@@ -1224,17 +1226,17 @@
//Too little CO2!
if(safe_co2_min)
if(CO2_pp < safe_co2_min)
gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath.gases[GAS_CO2][MOLES])
gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath_gases[GAS_CO2][MOLES])
H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2)
else
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
gas_breathed = breath.gases[GAS_CO2][MOLES]/6
gas_breathed = breath_gases[GAS_CO2][MOLES]/6
H.clear_alert("not_enough_co2")
//Exhale
breath.gases[GAS_CO2][MOLES] -= gas_breathed
breath.gases[GAS_O2][MOLES] += gas_breathed
breath_gases[GAS_CO2][MOLES] -= gas_breathed
breath_gases[GAS_O2][MOLES] += gas_breathed
gas_breathed = 0
@@ -1243,7 +1245,7 @@
//Too much toxins!
if(safe_toxins_max)
if(Toxins_pp > safe_toxins_max && !(NOBREATH in specflags))
var/ratio = (breath.gases[GAS_PL][MOLES]/safe_toxins_max) * 10
var/ratio = (breath_gases[GAS_PL][MOLES]/safe_toxins_max) * 10
if(H.reagents)
H.reagents.add_reagent("plasma", Clamp(ratio, tox_breath_dam_min, tox_breath_dam_max))
H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
@@ -1254,24 +1256,24 @@
//Too little toxins!
if(safe_toxins_min)
if(Toxins_pp < safe_toxins_min && !(NOBREATH in specflags))
gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath.gases[GAS_PL][MOLES])
gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath_gases[GAS_PL][MOLES])
H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox)
else
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
gas_breathed = breath.gases[GAS_PL][MOLES]/6
gas_breathed = breath_gases[GAS_PL][MOLES]/6
H.clear_alert("not_enough_tox")
//Exhale
breath.gases[GAS_PL][MOLES] -= gas_breathed
breath.gases[GAS_CO2][MOLES] += gas_breathed
breath_gases[GAS_PL][MOLES] -= gas_breathed
breath_gases[GAS_CO2][MOLES] += gas_breathed
gas_breathed = 0
//-- TRACES --//
if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here.
var/SA_pp = breath.get_breath_partial_pressure(breath.gases[GAS_N2O][MOLES])
var/SA_pp = breath.get_breath_partial_pressure(breath_gases[GAS_N2O][MOLES])
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
+12 -10
View File
@@ -105,9 +105,11 @@
var/oxygen_used = 0
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
var/O2_partialpressure = (breath.gases[GAS_O2][MOLES]/breath.total_moles())*breath_pressure
var/Toxins_partialpressure = (breath.gases[GAS_PL][MOLES]/breath.total_moles())*breath_pressure
var/CO2_partialpressure = (breath.gases[GAS_CO2][MOLES]/breath.total_moles())*breath_pressure
var/list/breath_gases = breath.gases
var/O2_partialpressure = (breath_gases[GAS_O2][MOLES]/breath.total_moles())*breath_pressure
var/Toxins_partialpressure = (breath_gases[GAS_PL][MOLES]/breath.total_moles())*breath_pressure
var/CO2_partialpressure = (breath_gases[GAS_CO2][MOLES]/breath.total_moles())*breath_pressure
//OXYGEN
@@ -119,7 +121,7 @@
var/ratio = safe_oxy_min/O2_partialpressure
adjustOxyLoss(min(5*ratio, 3))
failed_last_breath = 1
oxygen_used = breath.gases[GAS_O2][MOLES]*ratio/6
oxygen_used = breath_gases[GAS_O2][MOLES]*ratio/6
else
adjustOxyLoss(3)
failed_last_breath = 1
@@ -128,11 +130,11 @@
else //Enough oxygen
failed_last_breath = 0
adjustOxyLoss(-5)
oxygen_used = breath.gases[GAS_O2][MOLES]/6
oxygen_used = breath_gases[GAS_O2][MOLES]/6
clear_alert("oxy")
breath.gases[GAS_O2][MOLES] -= oxygen_used
breath.gases[GAS_CO2][MOLES] += oxygen_used
breath_gases[GAS_O2][MOLES] -= oxygen_used
breath_gases[GAS_CO2][MOLES] += oxygen_used
//CARBON DIOXIDE
if(CO2_partialpressure > safe_co2_max)
@@ -151,7 +153,7 @@
//TOXINS/PLASMA
if(Toxins_partialpressure > safe_tox_max)
var/ratio = (breath.gases[GAS_PL][MOLES]/safe_tox_max) * 10
var/ratio = (breath_gases[GAS_PL][MOLES]/safe_tox_max) * 10
if(reagents)
reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
@@ -159,8 +161,8 @@
clear_alert("tox_in_air")
//NITROUS OXIDE
if(breath.gases[GAS_N2O][MOLES])
var/SA_partialpressure = (breath.gases[GAS_N2O][MOLES]/breath.total_moles())*breath_pressure
if(breath_gases[GAS_N2O][MOLES])
var/SA_partialpressure = (breath_gases[GAS_N2O][MOLES]/breath.total_moles())*breath_pressure
if(SA_partialpressure > SA_para_min)
Paralyse(3)
if(SA_partialpressure > SA_sleep_min)
@@ -386,12 +386,14 @@
if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills.
if(beacon.air)
var/datum/gas_mixture/Z = beacon.air
var/trace_gases
var/list/Z_gases = Z.gases
var/trace_gases = FALSE
for(var/i in 5 to Z.gases.len)
if(Z.gases[i][MOLES])
if(Z_gases[i][MOLES])
trace_gases = TRUE
break
if(Z.gases[GAS_O2][MOLES] >= 16 && !Z.gases[GAS_PL][MOLES] && Z.gases[GAS_CO2][MOLES] < 10 && !trace_gases)
if(Z_gases[GAS_O2][MOLES] >= 16 && !Z_gases[GAS_PL][MOLES] && Z_gases[GAS_CO2][MOLES] < 10 && !trace_gases)
if((Z.temperature > 270) && (Z.temperature < 360))
var/pressure = Z.return_pressure()
if((pressure > 20) && (pressure < 550))
@@ -196,10 +196,11 @@
if(istype(T,/turf/simulated))
var/turf/simulated/ST = T
if(ST.air)
var/tox = ST.air.gases[GAS_PL][MOLES]
var/oxy = ST.air.gases[GAS_O2][MOLES]
var/n2 = ST.air.gases[GAS_N2][MOLES]
var/co2 = ST.air.gases[GAS_CO2][MOLES]
var/ST_gases = ST.air.gases
var/tox = ST_gases[GAS_PL][MOLES]
var/oxy = ST_gases[GAS_O2][MOLES]
var/n2 = ST_gases[GAS_N2][MOLES]
var/co2 = ST_gases[GAS_CO2][MOLES]
if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"])
atmos_suitable = 0