diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 08c4b15519c3..08f7d59e96fe 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -690,7 +690,7 @@ if(!istype(T)) return var/datum/gas_mixture/environment = T.return_air() - if(!istype(environment)) + if(!environment) return var/pressure = environment.return_pressure() if(pressure <= LAVALAND_EQUIPMENT_EFFECT_PRESSURE) diff --git a/code/datums/components/rot.dm b/code/datums/components/rot.dm index 6a35aecbe75a..eafc103a2284 100644 --- a/code/datums/components/rot.dm +++ b/code/datums/components/rot.dm @@ -21,6 +21,8 @@ return var/datum/gas_mixture/turf_air = T.return_air() + if(!turf_air) + return var/datum/gas_mixture/stank_breath = T.remove_air(1 / turf_air.return_volume() * turf_air.total_moles()) if(!stank_breath) return diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 0535265d02b2..00ca7e71aa4a 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -394,7 +394,7 @@ . = 0 if(M.loc) - environment = M.loc.return_air() + environment = M.return_air() if(environment) if(environment.get_moles(GAS_PLASMA) > GLOB.gas_data.visibility[GAS_PLASMA]) //if there's enough plasma in the air to see . += power * 0.5 diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm index 5471f0e7e461..70ef228f4717 100644 --- a/code/datums/mutations/actions.dm +++ b/code/datums/mutations/actions.dm @@ -42,7 +42,7 @@ /obj/effect/proc_holder/spell/targeted/olfaction/cast(list/targets, mob/living/user = usr) //can we sniff? is there miasma in the air? - var/datum/gas_mixture/air = user.loc.return_air() + var/datum/gas_mixture/air = user.return_air() if(air.get_moles(GAS_MIASMA) >= 0.1) user.adjust_disgust(sensitivity * 45) to_chat(user, span_warning("With your overly sensitive nose, you get a whiff of stench and feel sick! Try moving to a cleaner area!")) diff --git a/code/game/machinery/airlock_cycle_control.dm b/code/game/machinery/airlock_cycle_control.dm index 088fc61e6a16..598171d53e9b 100644 --- a/code/game/machinery/airlock_cycle_control.dm +++ b/code/game/machinery/airlock_cycle_control.dm @@ -135,14 +135,12 @@ airlock.bolt() /obj/machinery/advanced_airlock_controller/update_icon(use_hash = FALSE) - var/turf/location = get_turf(src) - if(!location) + if(!isopenturf(get_turf(src))) return var/pressure = 0 - if(location) - var/datum/gas_mixture/environment = location.return_air() - if(environment) - pressure = environment.return_pressure() + var/datum/gas_mixture/environment = return_air() + if(environment) + pressure = environment.return_pressure() var/maxpressure = (exterior_pressure && (cyclestate == AIRLOCK_CYCLESTATE_OUTCLOSING || cyclestate == AIRLOCK_CYCLESTATE_OUTOPENING || cyclestate == AIRLOCK_CYCLESTATE_OUTOPEN)) ? exterior_pressure : interior_pressure var/pressure_bars = round(pressure / maxpressure * 5 + 0.01) @@ -295,15 +293,13 @@ update_icon(TRUE) return - var/turf/location = get_turf(src) - if(!location) + if(!isopenturf(get_turf(src))) update_icon(TRUE) return var/pressure = 0 - if(location) - var/datum/gas_mixture/environment = location.return_air() - if(environment) - pressure = environment.return_pressure() + var/datum/gas_mixture/environment = return_air() + if(environment) + pressure = environment.return_pressure() update_error_status() var/doors_valid = TRUE @@ -596,10 +592,9 @@ ui.open() /obj/machinery/advanced_airlock_controller/ui_data(mob/user) - var/turf/T = get_turf(src) var/pressure = 0 - if(T) - var/datum/gas_mixture/environment = T.return_air() + if(isopenturf(get_turf(src))) + var/datum/gas_mixture/environment = return_air() if(environment) pressure = environment.return_pressure() diff --git a/code/game/machinery/electrolyzer.dm b/code/game/machinery/electrolyzer.dm index 7ef92440e3e9..1acf24aa7ed9 100644 --- a/code/game/machinery/electrolyzer.dm +++ b/code/game/machinery/electrolyzer.dm @@ -70,8 +70,7 @@ update_icon() return PROCESS_KILL - var/turf/L = loc - if(!istype(L)) + if(!isopenturf(get_turf(src))) if(mode != ELECTROLYZER_MODE_STANDBY) mode = ELECTROLYZER_MODE_STANDBY update_icon() @@ -86,7 +85,7 @@ if(mode == ELECTROLYZER_MODE_STANDBY) return - var/datum/gas_mixture/env = L.return_air() //get air from the turf + var/datum/gas_mixture/env = return_air() //get air from the turf var/datum/gas_mixture/removed = env.remove(0.1 * env.total_moles()) if(!removed) diff --git a/code/game/machinery/shuttle/shuttle_engine.dm b/code/game/machinery/shuttle/shuttle_engine.dm index 2726e21b0b8f..6c62d06978b2 100644 --- a/code/game/machinery/shuttle/shuttle_engine.dm +++ b/code/game/machinery/shuttle/shuttle_engine.dm @@ -111,10 +111,11 @@ //Thanks to spaceheater.dm for inspiration :) /obj/machinery/shuttle/engine/proc/fireEngine() - var/turf/heatTurf = loc - if(!heatTurf) + if(!isopenturf(get_turf(src))) + return + var/datum/gas_mixture/env = return_air() + if(!env) return - var/datum/gas_mixture/env = heatTurf.return_air() var/heat_cap = env.heat_capacity() var/req_power = abs(env.return_temperature() - ENGINE_HEAT_TARGET) * heat_cap req_power = min(req_power, ENGINE_HEATING_POWER) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index cd52aa4f21fc..5dde2ea18601 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -73,14 +73,13 @@ return PROCESS_KILL if(cell && cell.charge > 0) - var/turf/L = loc - if(!istype(L)) + if(!isopenturf(get_turf(src))) if(mode != HEATER_MODE_STANDBY) mode = HEATER_MODE_STANDBY update_icon() return - var/datum/gas_mixture/env = L.return_air() + var/datum/gas_mixture/env = return_air() var/newMode = HEATER_MODE_STANDBY if(setMode != HEATER_MODE_COOL && env.return_temperature() < targetTemperature - temperatureTolerance) @@ -185,13 +184,10 @@ data["minTemp"] = max(settableTemperatureMedian - settableTemperatureRange - T0C, TCMB) data["maxTemp"] = settableTemperatureMedian + settableTemperatureRange - T0C - var/turf/L = get_turf(loc) var/curTemp - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - curTemp = env.return_temperature() - else if(isturf(L)) - curTemp = L.return_temperature() + if(isopenturf(get_turf(src))) + var/datum/gas_mixture/env = return_air() + curTemp = env?.return_temperature() if(isnull(curTemp)) data["currentTemp"] = "N/A" else diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 26ef12cd4caf..3eabd4bd65e9 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -148,10 +148,9 @@ GLOBAL_LIST_EMPTY(telecomms_list) /obj/machinery/telecomms/proc/update_speed() if(!on) return - var/turf/T = get_turf(src) //yogs var/speedloss = 0 - var/datum/gas_mixture/env = T.return_air() - var/temperature = env.return_temperature() + var/datum/gas_mixture/env = return_air() + var/temperature = env?.return_temperature() if(temperature <= 150) // 150K optimal operating parameters net_efective = 100 else diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index ca78ee00492a..be8d385e0efc 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -385,14 +385,13 @@ GLOBAL_LIST_EMPTY(PDAs) if (3) dat += "

[PDAIMG(atmos)] Atmospheric Readings

" - var/turf/T = user.loc - if (isnull(T)) + if (!isopenturf(get_turf(user))) dat += "Unable to obtain a reading.
" else - var/datum/gas_mixture/environment = T.return_air() + var/datum/gas_mixture/environment = user.return_air() - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() + var/pressure = environment?.return_pressure() + var/total_moles = environment?.total_moles() dat += "Air Pressure: [round(pressure,0.1)] kPa
" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index dbbc7b078747..c9151417110e 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -599,11 +599,14 @@ GENE SCANNER if (user.stat || user.eye_blind) return - var/turf/location = user.loc - if(!istype(location)) + if(!isopenturf(get_turf(user))) return - var/datum/gas_mixture/environment = location.return_air() + var/datum/gas_mixture/environment = user.return_air() + + if(!environment) + to_chat(user, span_info("No air detected.")) + return var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index e122075e5ea7..0827192d7f72 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -35,4 +35,4 @@ if(tank) return tank.air_contents else - return loc.return_air() \ No newline at end of file + return loc?.return_air() diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index c2fa59f4fd6d..bb5777cbfa3e 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -177,8 +177,9 @@ sleep(OPEN_DURATION + 0.2 SECONDS) pod_moving = FALSE if(!QDELETED(pod)) - var/datum/gas_mixture/floor_mixture = loc.return_air() - equalize_all_gases_in_list(list(pod.air_contents,floor_mixture)) + var/datum/gas_mixture/floor_mixture = loc?.return_air() + if(floor_mixture) + equalize_all_gases_in_list(list(pod.air_contents,floor_mixture)) /obj/structure/transit_tube/station/init_tube_dirs() switch(dir) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index b46f06061c6d..ea306ca1e1e1 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -284,11 +284,11 @@ data["fire_alarm"] = A.fire var/turf/T = get_turf(src) - var/datum/gas_mixture/environment = T.return_air() + var/datum/gas_mixture/environment = T?.return_air() var/datum/tlv/cur_tlv data["environment_data"] = list() - var/pressure = environment.return_pressure() + var/pressure = environment?.return_pressure() cur_tlv = TLV["pressure"] data["environment_data"] += list(list( "name" = "Pressure", @@ -296,7 +296,7 @@ "unit" = "kPa", "danger_level" = cur_tlv.get_danger_level(pressure) )) - var/temperature = environment.return_temperature() + var/temperature = environment?.return_temperature() cur_tlv = TLV["temperature"] data["environment_data"] += list(list( "name" = "Temperature", @@ -304,9 +304,9 @@ "unit" = "K ([round(temperature - T0C, 0.1)]C)", "danger_level" = cur_tlv.get_danger_level(temperature) )) - var/total_moles = environment.total_moles() - var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.return_temperature() / environment.return_volume() - for(var/gas_id in environment.get_gases()) + var/total_moles = environment?.total_moles() + var/partial_pressure = R_IDEAL_GAS_EQUATION * environment?.return_temperature() / environment?.return_volume() + for(var/gas_id in environment?.get_gases()) if(!(gas_id in TLV)) // We're not interested in this gas, it seems. continue cur_tlv = TLV[gas_id] @@ -658,13 +658,16 @@ if((stat & (NOPOWER|BROKEN)) || shorted) return - var/turf/location = get_turf(src) - if(!location) + if(!isopenturf(get_turf(src))) return var/datum/tlv/cur_tlv - var/datum/gas_mixture/environment = location.return_air() + var/datum/gas_mixture/environment = return_air() + + if(!environment) + return + var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.return_temperature() / environment.return_volume() cur_tlv = TLV["pressure"] diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 23538111ad00..41e7d7aeb382 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -128,6 +128,10 @@ var/datum/gas_mixture/air_contents = airs[1] var/datum/gas_mixture/environment = loc.return_air() + + if(!environment) + return + var/environment_pressure = environment.return_pressure() var/environment_moles = environment.total_moles() var/last_moles_real_added = environment_moles - last_moles diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index bb39bc4536ec..4d389012d034 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -150,6 +150,9 @@ var/datum/gas_mixture/environment = tile.return_air() var/datum/gas_mixture/air_contents = airs[1] + if(!environment) + return FALSE + if(air_contents.return_pressure() >= 50 * ONE_ATMOSPHERE || !islist(filter_types)) return FALSE diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 6e303976e0f7..d27a593f2811 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -422,14 +422,13 @@ var/datum/gas_mixture/env = L.return_air() var/pressure_delta = (SEND_PRESSURE*1.01) - air_contents.return_pressure() - if(env.return_temperature() > 0) + if(env?.return_temperature() > 0) var/transfer_moles = 0.1 * pressure_delta*air_contents.return_volume()/(env.return_temperature() * R_IDEAL_GAS_EQUATION) //Actually transfer the gas var/datum/gas_mixture/removed = env.remove(transfer_moles) air_contents.merge(removed) - //if full enough, switch to ready mode if(air_contents.return_pressure() >= SEND_PRESSURE) full_pressure = TRUE