diff --git a/auxmos.dll b/auxmos.dll
index 4e0687fa2b..f60b3553cc 100644
Binary files a/auxmos.dll and b/auxmos.dll differ
diff --git a/auxmos.pdb b/auxmos.pdb
index da06980179..9dfb6db848 100644
Binary files a/auxmos.pdb and b/auxmos.pdb differ
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 6266dcc6d3..c585a822ea 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -152,6 +152,10 @@
#define ATMOS_PASS_PROC -1 //ask CanAtmosPass()
#define ATMOS_PASS_DENSITY -2 //just check density
+// Adjacency flags
+#define ATMOS_ADJACENT_ANY (1<<0)
+#define ATMOS_ADJACENT_FIRELOCK (1<<1)
+
#define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) )
#define CANVERTICALATMOSPASS(A, O) ( A.CanAtmosPassVertical == ATMOS_PASS_PROC ? A.CanAtmosPass(O, TRUE) : ( A.CanAtmosPassVertical == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPassVertical ) )
@@ -323,14 +327,6 @@
#define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that
once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */
-
-#ifdef TESTING
-GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0))
-#define CALCULATE_ADJACENT_TURFS(T) if (SSadjacent_air.queue[T]) { GLOB.atmos_adjacent_savings[1] += 1 } else { GLOB.atmos_adjacent_savings[2] += 1; SSadjacent_air.queue[T] = 1 }
-#else
-#define CALCULATE_ADJACENT_TURFS(T) SSadjacent_air.queue[T] = 1
-#endif
-
//If you're doing spreading things related to atmos, DO NOT USE CANATMOSPASS, IT IS NOT CHEAP. use this instead, the info is cached after all. it's tweaked just a bit to allow for circular checks
#define TURFS_CAN_SHARE(T1, T2) (LAZYACCESS(T2.atmos_adjacent_turfs, T1) || LAZYLEN(T1.atmos_adjacent_turfs & T2.atmos_adjacent_turfs))
diff --git a/code/controllers/subsystem/adjacent_air.dm b/code/controllers/subsystem/adjacent_air.dm
deleted file mode 100644
index 99ee587826..0000000000
--- a/code/controllers/subsystem/adjacent_air.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-SUBSYSTEM_DEF(adjacent_air)
- name = "Atmos Adjacency"
- flags = SS_BACKGROUND
- runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
- wait = 10
- priority = FIRE_PRIORITY_ATMOS_ADJACENCY
- var/list/queue = list()
-
-/datum/controller/subsystem/adjacent_air/stat_entry(msg)
-#ifdef TESTING
- msg = "P:[length(queue)], S:[GLOB.atmos_adjacent_savings[1]], T:[GLOB.atmos_adjacent_savings[2]]"
-#else
- msg = "P:[length(queue)]"
-#endif
- return ..()
-
-/datum/controller/subsystem/adjacent_air/Initialize()
- while(length(queue))
- fire(mc_check = FALSE)
- return ..()
-
-/datum/controller/subsystem/adjacent_air/fire(resumed = FALSE, mc_check = TRUE)
- if(SSair.thread_running())
- pause()
- return
-
- var/list/queue = src.queue
-
- while (length(queue))
- var/turf/currT = queue[1]
- queue.Cut(1,2)
-
- currT.ImmediateCalculateAdjacentTurfs()
-
- if(mc_check)
- if(MC_TICK_CHECK)
- break
- else
- CHECK_TICK
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index b094f5c28a..39b9baae62 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -34,6 +34,8 @@
/obj/machinery/door/firedoor/Initialize(mapload)
. = ..()
CalculateAffectingAreas()
+ UpdateAdjacencyFlags()
+
/obj/machinery/door/firedoor/examine(mob/user)
. = ..()
@@ -81,6 +83,24 @@
var/area/A = I
LAZYADD(A.firedoors, src)
+/obj/machinery/door/firedoor/proc/UpdateAdjacencyFlags()
+ var/turf/T = get_turf(src)
+ if(flags_1 & ON_BORDER_1)
+ for(var/t in T.atmos_adjacent_turfs)
+ if(get_dir(loc, t) == dir)
+ var/turf/open/T2 = t
+ if(T2 in T.atmos_adjacent_turfs)
+ T.atmos_adjacent_turfs[T2] |= ATMOS_ADJACENT_FIRELOCK
+ if(T in T2.atmos_adjacent_turfs)
+ T2.atmos_adjacent_turfs[T] |= ATMOS_ADJACENT_FIRELOCK
+ else
+ for(var/t in T.atmos_adjacent_turfs)
+ var/turf/open/T2 = t
+ if(T2 in T.atmos_adjacent_turfs)
+ T.atmos_adjacent_turfs[T2] |= ATMOS_ADJACENT_FIRELOCK
+ if(T in T2.atmos_adjacent_turfs)
+ T2.atmos_adjacent_turfs[T] |= ATMOS_ADJACENT_FIRELOCK
+
/obj/machinery/door/firedoor/closed
icon_state = "door_closed"
opacity = TRUE
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index a62fc70917..7502d4b2f0 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
if(turf_type)
var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags)
- CALCULATE_ADJACENT_TURFS(newT)
+ newT.ImmediateCalculateAdjacentTurfs()
/turf/proc/copyTurf(turf/T)
if(T.type != type)
@@ -285,10 +285,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
//If you modify this function, ensure it works correctly with lateloaded map templates.
/turf/proc/AfterChange(flags) //called after a turf has been replaced in ChangeTurf()
levelupdate()
- if(flags & CHANGETURF_RECALC_ADJACENT)
- ImmediateCalculateAdjacentTurfs()
- else
- CALCULATE_ADJACENT_TURFS(src)
+ ImmediateCalculateAdjacentTurfs()
//update firedoor adjacency
var/list/turfs_to_check = get_adjacent_open_turfs(src) | src
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index b6be7f1fe1..a42215e511 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
add_overlay(/obj/effect/fullbright)
if(requires_activation)
- CALCULATE_ADJACENT_TURFS(src)
+ ImmediateCalculateAdjacentTurfs()
if (light_power && light_range)
update_light()
@@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/proc/set_temperature()
/turf/proc/Initalize_Atmos(times_fired)
- CALCULATE_ADJACENT_TURFS(src)
+ ImmediateCalculateAdjacentTurfs()
/turf/Destroy(force)
. = QDEL_HINT_IWILLGC
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
index 8d063825f1..83eb5d8ef3 100644
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ b/code/modules/atmospherics/environmental/LINDA_system.dm
@@ -40,21 +40,17 @@
return FALSE
/turf/proc/ImmediateCalculateAdjacentTurfs()
- if(SSair.thread_running())
- CALCULATE_ADJACENT_TURFS(src)
- return
var/canpass = CANATMOSPASS(src, src)
var/canvpass = CANVERTICALATMOSPASS(src, src)
for(var/direction in GLOB.cardinals_multiz)
var/turf/T = get_step_multiz(src, direction)
if(!istype(T))
continue
- var/opp_dir = REVERSE_DIR(direction)
if(isopenturf(T) && !(blocks_air || T.blocks_air) && ((direction & (UP|DOWN))? (canvpass && CANVERTICALATMOSPASS(T, src)) : (canpass && CANATMOSPASS(T, src))) )
LAZYINITLIST(atmos_adjacent_turfs)
LAZYINITLIST(T.atmos_adjacent_turfs)
- atmos_adjacent_turfs[T] = direction
- T.atmos_adjacent_turfs[src] = opp_dir
+ atmos_adjacent_turfs[T] = ATMOS_ADJACENT_ANY
+ T.atmos_adjacent_turfs[src] = ATMOS_ADJACENT_ANY
else
if (atmos_adjacent_turfs)
atmos_adjacent_turfs -= T
@@ -65,7 +61,12 @@
T.__update_auxtools_turf_adjacency_info(isspaceturf(T.get_z_base_turf()), -1)
UNSETEMPTY(atmos_adjacent_turfs)
src.atmos_adjacent_turfs = atmos_adjacent_turfs
- set_sleeping(blocks_air)
+ for(var/t in atmos_adjacent_turfs)
+ var/turf/open/T = t
+ for(var/obj/machinery/door/firedoor/FD in T)
+ FD.UpdateAdjacencyFlags()
+ for(var/obj/machinery/door/firedoor/FD in src)
+ FD.UpdateAdjacencyFlags()
__update_auxtools_turf_adjacency_info(isspaceturf(get_z_base_turf()))
/turf/proc/set_sleeping(should_sleep)
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 56820d2836..fe7a8fdfaf 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -280,9 +280,12 @@ we use a hook instead
parse_gas_string(model.initial_gas_mix)
return 1
+/datum/gas_mixture/proc/__auxtools_parse_gas_string(gas_string)
+
/datum/gas_mixture/parse_gas_string(gas_string)
gas_string = SSair.preprocess_gas_string(gas_string)
-
+ return __auxtools_parse_gas_string(gas_string)
+/*
var/list/gas = params2list(gas_string)
if(gas["TEMP"])
var/temp = text2num(gas["TEMP"])
@@ -295,6 +298,7 @@ we use a hook instead
set_moles(id, text2num(gas[id]))
archive()
return 1
+ */
/*
/datum/gas_mixture/react(datum/holder)
. = NO_REACTION
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index 738d10665a..d69b9da768 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars_by_type, typecacheof_assoc_list(list(
if(toupdate.len)
for(var/turf/T1 in toupdate)
- CALCULATE_ADJACENT_TURFS(T1)
+ T1.ImmediateCalculateAdjacentTurfs()
return copiedobjs
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index fe44e5fef0..07b76eabeb 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -952,7 +952,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\
"You hear a loud crack as you are washed with a wave of heat.")
- CALCULATE_ADJACENT_TURFS(T)
+ T.ImmediateCalculateAdjacentTurfs()
//Do not blow up our internal radio
/obj/machinery/power/supermatter_crystal/contents_explosion(severity, target, origin)
diff --git a/dependencies.sh b/dependencies.sh
index 7943782996..b5a1d0c2e8 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -21,7 +21,7 @@ export SPACEMAN_DMM_VERSION=suite-1.7
export PYTHON_VERSION=3.7.9
# Auxmos git tag
-export AUXMOS_VERSION=v1.1.1
+export AUXMOS_VERSION=v2.2.1
# Extools git tag
export EXTOOLS_VERSION=v0.0.7
diff --git a/tgstation.dme b/tgstation.dme
index a1206ea64c..53647d584f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -360,7 +360,6 @@
#include "code\controllers\configuration\entries\vote.dm"
#include "code\controllers\subsystem\achievements.dm"
#include "code\controllers\subsystem\activity.dm"
-#include "code\controllers\subsystem\adjacent_air.dm"
#include "code\controllers\subsystem\air.dm"
#include "code\controllers\subsystem\assets.dm"
#include "code\controllers\subsystem\atoms.dm"