From d95f5729cc9cf912872e2ca0c09e6aa5bb87e4ca Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Sun, 18 Sep 2022 16:27:48 -0700 Subject: [PATCH] wow i forgot some extremely important updates haha --- code/__DEFINES/atmospherics.dm | 12 ++---- code/controllers/subsystem/adjacent_air.dm | 39 ------------------- code/game/machinery/doors/firedoor.dm | 16 ++++++++ code/game/turfs/change_turf.dm | 7 +--- code/game/turfs/turf.dm | 4 +- .../environmental/LINDA_system.dm | 13 +++---- code/modules/holodeck/area_copy.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 2 +- tgstation.dme | 1 - 9 files changed, 32 insertions(+), 64 deletions(-) delete mode 100644 code/controllers/subsystem/adjacent_air.dm 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 c0866ce165..2a0dbd316a 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) . = ..() @@ -53,6 +55,20 @@ 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 + T.atmos_adjacent_turfs[T2] |= ATMOS_ADJACENT_FIRELOCK + T2.atmos_adjacent_turfs[T] |= ATMOS_ADJACENT_FIRELOCK + else + for(var/t in T.atmos_adjacent_turfs) + var/turf/open/T2 = t + T.atmos_adjacent_turfs[T2] |= ATMOS_ADJACENT_FIRELOCK + 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 dc44ac728f..549e244669 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..033ea6d871 100644 --- a/code/modules/atmospherics/environmental/LINDA_system.dm +++ b/code/modules/atmospherics/environmental/LINDA_system.dm @@ -40,21 +40,19 @@ 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 + for(var/obj/machinery/door/firedoor/FD in T) + FD.UpdateAdjacencyFlags() else if (atmos_adjacent_turfs) atmos_adjacent_turfs -= T @@ -65,7 +63,8 @@ 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/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/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 f7f5b335c5..cb02a440b8 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/tgstation.dme b/tgstation.dme index 67c3f21514..18d1486683 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -353,7 +353,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"