diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm
index e4d4d3f4cde..6eace742248 100644
--- a/code/LINDA/LINDA_system.dm
+++ b/code/LINDA/LINDA_system.dm
@@ -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)
\ No newline at end of file
diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm
index fd4b203ef1a..d126d58e8b6 100644
--- a/code/LINDA/LINDA_turf_tile.dm
+++ b/code/LINDA/LINDA_turf_tile.dm
@@ -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()
diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm
index 4f0b6ea1a3a..4ed5bdcdf47 100644
--- a/code/datums/gas_mixture.dm
+++ b/code/datums/gas_mixture.dm
@@ -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)
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index a3b1aa4bb0a..9b0513817a5 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -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
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index d09b18aea4f..dfc643b8f17 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -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"]
diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm
index fcb0c8d3693..964818f06c6 100644
--- a/code/game/machinery/atmo_control.dm
+++ b/code/game/machinery/atmo_control.dm
@@ -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
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index 62c33f85b93..d850a556c83 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -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)
diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index 8db33729e76..d75a9705556 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -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
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 8dbc5731f23..8f68ea886fd 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -268,10 +268,11 @@ MASS SPECTROMETER
else
user.show_message("Pressure: [round(pressure,0.1)] kPa", 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("Nitrogen: [round(n2_concentration*100)] %", 1)
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 9b5b7bfa64d..64b9ca2636d 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -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)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 845fb5c2bb1..c900568cbfd 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index d2fb94df7ca..0d77114d345 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 29533ed6204..202f9b26282 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index e3fd3fc9c9b..f96fc2c6960 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -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)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 0d8dc6aee35..04315cc6d01 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -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))
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index eab36005bf6..d906d58a3ec 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -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