diff --git a/Dockerfile b/Dockerfile
index e3d1201d860..4425537854d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1
-FROM beestation/byond:514.1583 as base
+FROM beestation/byond:514.1589 as base
# Install the tools needed to compile our rust dependencies
FROM base as rust-build
diff --git a/auxtools/auxmos.dll b/auxtools/auxmos.dll
index 9a546ee9b5c..c7ec6332312 100644
Binary files a/auxtools/auxmos.dll and b/auxtools/auxmos.dll differ
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 7e30289cc61..72ed8f4002c 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -144,6 +144,9 @@
#define ATMOS_PASS_PROC -1 //ask CanAtmosPass()
#define ATMOS_PASS_DENSITY -2 //just check density
+#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 ) )
@@ -303,13 +306,6 @@
T.pixel_x = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_X;\
T.pixel_y = (PipingLayer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_P_Y;
-#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
-
GLOBAL_LIST_INIT(pipe_paint_colors, sortList(list(
"amethyst" = rgb(130,43,255), //supplymain
"blue" = rgb(0,0,255),
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index f24fd5d6bea..b39186a7663 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -77,9 +77,9 @@
//Update this whenever the byond version is stable so people stop updating to hilariously broken versions
#define MAX_COMPILER_VERSION 514
-#define MAX_COMPILER_BUILD 1584
+#define MAX_COMPILER_BUILD 1589
#if DM_VERSION > MAX_COMPILER_VERSION || DM_BUILD > MAX_COMPILER_BUILD
-#warn WARNING: Your BYOND version is over the recommended version (514.1584)! Stability is not guaranteed.
+#warn WARNING: Your BYOND version is over the recommended version (514.1589)! Stability is not guaranteed.
#endif
//Log the full sendmaps profile on 514.1556+, any earlier and we get bugs or it not existing
#if DM_VERSION >= 514 && DM_BUILD >= 1556
diff --git a/code/controllers/subsystem/adjacent_air.dm b/code/controllers/subsystem/adjacent_air.dm
deleted file mode 100644
index de0fa093232..00000000000
--- a/code/controllers/subsystem/adjacent_air.dm
+++ /dev/null
@@ -1,54 +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()
- var/list/disable_queue = list()
-
-/datum/controller/subsystem/adjacent_air/stat_entry()
-#ifdef TESTING
- . = ..("P:[length(queue)], S:[GLOB.atmos_adjacent_savings[1]], T:[GLOB.atmos_adjacent_savings[2]]")
-#else
- . = ..("P:[length(queue)]")
-#endif
-
-/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/disable_queue = src.disable_queue
-
- while (length(disable_queue))
- var/turf/terf = disable_queue[1]
- var/arg = disable_queue[terf]
- disable_queue.Cut(1,2)
-
- terf.ImmediateDisableAdjacency(arg)
-
- if(mc_check)
- if(MC_TICK_CHECK)
- return
- else
- CHECK_TICK
-
- 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/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index e0a87144d1f..4df37094a90 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -346,7 +346,10 @@ SUBSYSTEM_DEF(air)
var/datum/callback/cb = cur_op[3]
cb.Invoke(air1, air2)
else
- air1.transfer_ratio_to(air2, cur_op[3])
+ if(cur_op[3] == 0)
+ air1.transfer_to(air2, air1.total_moles())
+ else
+ air1.transfer_ratio_to(air2, cur_op[3])
if(MC_TICK_CHECK)
return
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 2f268705c84..74444fccbc2 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -39,6 +39,7 @@
/obj/machinery/door/firedoor/Initialize(mapload)
. = ..()
CalculateAffectingAreas()
+ UpdateAdjacencyFlags()
/obj/machinery/door/firedoor/examine(mob/user)
. = ..()
@@ -58,6 +59,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/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index a47e01c2b28..c991ff77747 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -661,7 +661,7 @@
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.")
shard.Consume()
- CALCULATE_ADJACENT_TURFS(T)
+ T.ImmediateCalculateAdjacentTurfs()
/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna)
return FALSE
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index bfc2eb89a4e..b6bbee8b561 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)
@@ -160,17 +160,18 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
return
var/turf/open/newTurf = .
newTurf.air.copy_from(stashed_air)
- update_air_ref(planetary_atmos ? 1 : 2)
+ newTurf.update_air_ref(planetary_atmos ? 1 : 2)
QDEL_NULL(stashed_air)
else
+ flags |= CHANGETURF_RECALC_ADJACENT
if(ispath(path,/turf/closed))
- flags |= CHANGETURF_RECALC_ADJACENT
- update_air_ref(-1)
. = ..()
+ var/turf/open/newTurf = .
+ newTurf.update_air_ref(-1)
else
. = ..()
- if(!istype(air,/datum/gas_mixture))
- Initalize_Atmos(0)
+ var/turf/open/newTurf = .
+ newTurf.Initalize_Atmos(0)
/turf/closed/ChangeTurf(path, list/new_baseturfs, flags)
if(ispath(path,/turf/open))
@@ -298,10 +299,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/open/_open.dm b/code/game/turfs/open/_open.dm
index c5d78575d02..a3dc29e721e 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -149,11 +149,10 @@
baseturfs = /turf/open/indestructible/airblock
/turf/open/Initalize_Atmos(times_fired)
- if(!blocks_air)
- if(!istype(air,/datum/gas_mixture/turf))
- air = new(2500,src)
- air.copy_from_turf(src)
- update_air_ref(planetary_atmos ? 1 : 2)
+ if(!istype(air,/datum/gas_mixture/turf))
+ air = new(2500,src)
+ air.copy_from_turf(src)
+ update_air_ref(planetary_atmos ? 1 : 2)
update_visuals()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 2c06cbeaac2..37abb047707 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -87,7 +87,7 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists)
add_overlay(/obj/effect/fullbright)
if(requires_activation)
- CALCULATE_ADJACENT_TURFS(src)
+ ImmediateCalculateAdjacentTurfs()
if(color)
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
@@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists)
/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 2caaaf6d837..c129cfdcd2b 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
@@ -66,12 +62,15 @@
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/ImmediateDisableAdjacency(disable_adjacent = TRUE)
- if(SSair.thread_running())
- SSadjacent_air.disable_queue[src] = disable_adjacent
- return
if(disable_adjacent)
for(var/direction in GLOB.cardinals_multiz)
var/turf/T = get_step_multiz(src, direction)
diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
index a8f05d8ec50..c39cbcebe6a 100644
--- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
+++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm
@@ -50,7 +50,11 @@
if(!giver)
return FALSE
if(SSair.thread_running())
- SSair.deferred_airs += list(list(giver, air, moles / giver.total_moles()))
+ var giver_moles = giver.total_moles()
+ if(giver_moles > 0)
+ SSair.deferred_airs += list(list(giver, air, moles / giver_moles))
+ else
+ SSair.deferred_airs += list(list(giver, air, 0))
else
giver.transfer_to(air, moles)
update_visuals()
@@ -70,7 +74,11 @@
if(!taker || !return_air()) // shouldn't transfer from space
return FALSE
if(SSair.thread_running())
- SSair.deferred_airs += list(list(air, taker, moles / air.total_moles()))
+ var air_moles = air.total_moles()
+ if(air_moles > 0)
+ SSair.deferred_airs += list(list(air, taker, moles / air_moles))
+ else
+ SSair.deferred_airs += list(list(air, taker, 0))
else
air.transfer_to(taker, moles)
update_visuals()
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 191f643b90b..ad06e761ccb 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -268,7 +268,11 @@ 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)
+ return __auxtools_parse_gas_string(gas_string)
+ /*
var/list/gas = params2list(gas_string)
if(gas["TEMP"])
var/temp = text2num(gas["TEMP"])
@@ -279,7 +283,7 @@ we use a hook instead
clear()
for(var/id in gas)
set_moles(id, text2num(gas[id]))
- return 1
+ */
/datum/gas_mixture/proc/set_analyzer_results(instability)
if(!analyzer_results)
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
index f61b4793742..801065ab343 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm
@@ -88,6 +88,8 @@
air_update_turf()
var/datum/pipeline/parent1 = parents[1]
+ if(!parent1)
+ return
parent1.update = PIPENET_UPDATE_STATUS_RECONCILE_NEEDED
else //external -> output
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index 6d6b4ec4a3f..3e0e53bfe25 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -31,7 +31,7 @@
else
var/turf/open/OT = T
environment_temperature = OT.GetTemperature()
- else
+ else if(T != null)
environment_temperature = T.return_temperature()
if(pipe_air != null)
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 429c2e3fd33..febe258140d 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -4,7 +4,7 @@
#define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 1MB //Could probably do with being lower.
-#define MAX_RECOMMENDED_CLIENT 1583
+#define MAX_RECOMMENDED_CLIENT 1589
GLOBAL_LIST_INIT(blacklisted_builds, list(
"1407" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see",
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
index c94700b45e1..371692240bb 100644
--- a/code/modules/holodeck/area_copy.dm
+++ b/code/modules/holodeck/area_copy.dm
@@ -142,6 +142,6 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
if(toupdate.len)
for(var/turf/T1 in toupdate)
- CALCULATE_ADJACENT_TURFS(T1)
+ T1.ImmediateCalculateAdjacentTurfs()
return copiedobjs
diff --git a/dependencies.sh b/dependencies.sh
index 4789cfe9dbb..b4f1d0f2771 100755
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -5,7 +5,7 @@
# byond version
export BYOND_MAJOR=514
-export BYOND_MINOR=1583
+export BYOND_MINOR=1589
#rust version
export RUST_VERSION=1.54.0
@@ -21,7 +21,7 @@ export NODE_VERSION_PRECISE=12.22.4
export SPACEMAN_DMM_VERSION=suite-1.7.1
#auxmos version
-export AUXMOS_VERSION=1.1.2
+export AUXMOS_VERSION=2.2.2
# Python version for mapmerge and other tools
export PYTHON_VERSION=3.9.10
diff --git a/nsv13.dme b/nsv13.dme
index 6625a361ee4..46bf04fbd7e 100644
--- a/nsv13.dme
+++ b/nsv13.dme
@@ -330,7 +330,6 @@
#include "code\controllers\configuration\entries\resources.dm"
#include "code\controllers\subsystem\achievements.dm"
#include "code\controllers\subsystem\acid.dm"
-#include "code\controllers\subsystem\adjacent_air.dm"
#include "code\controllers\subsystem\air.dm"
#include "code\controllers\subsystem\ambience.dm"
#include "code\controllers\subsystem\assets.dm"