This commit is contained in:
Katherine Kiefer
2022-06-10 20:00:02 +10:00
parent 5c39357aa0
commit 31c5983d17
17 changed files with 62 additions and 58 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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!"))

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -385,14 +385,13 @@ GLOBAL_LIST_EMPTY(PDAs)
if (3)
dat += "<h4>[PDAIMG(atmos)] Atmospheric Readings</h4>"
var/turf/T = user.loc
if (isnull(T))
if (!isopenturf(get_turf(user)))
dat += "Unable to obtain a reading.<br>"
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<br>"

View File

@@ -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()

View File

@@ -35,4 +35,4 @@
if(tank)
return tank.air_contents
else
return loc.return_air()
return loc?.return_air()

View File

@@ -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)

View File

@@ -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"]

View File

@@ -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

View File

@@ -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

View File

@@ -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