wow i forgot some extremely important updates haha

This commit is contained in:
Putnam3145
2022-09-18 16:27:48 -07:00
parent 1bb15d2858
commit d95f5729cc
9 changed files with 32 additions and 64 deletions

View File

@@ -152,6 +152,10 @@
#define ATMOS_PASS_PROC -1 //ask CanAtmosPass() #define ATMOS_PASS_PROC -1 //ask CanAtmosPass()
#define ATMOS_PASS_DENSITY -2 //just check density #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 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 ) ) #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 #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 */ 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 //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)) #define TURFS_CAN_SHARE(T1, T2) (LAZYACCESS(T2.atmos_adjacent_turfs, T1) || LAZYLEN(T1.atmos_adjacent_turfs & T2.atmos_adjacent_turfs))

View File

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

View File

@@ -34,6 +34,8 @@
/obj/machinery/door/firedoor/Initialize(mapload) /obj/machinery/door/firedoor/Initialize(mapload)
. = ..() . = ..()
CalculateAffectingAreas() CalculateAffectingAreas()
UpdateAdjacencyFlags()
/obj/machinery/door/firedoor/examine(mob/user) /obj/machinery/door/firedoor/examine(mob/user)
. = ..() . = ..()
@@ -53,6 +55,20 @@
var/area/A = I var/area/A = I
LAZYADD(A.firedoors, src) 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 /obj/machinery/door/firedoor/closed
icon_state = "door_closed" icon_state = "door_closed"
opacity = TRUE opacity = TRUE

View File

@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
if(turf_type) if(turf_type)
var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags) var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags)
CALCULATE_ADJACENT_TURFS(newT) newT.ImmediateCalculateAdjacentTurfs()
/turf/proc/copyTurf(turf/T) /turf/proc/copyTurf(turf/T)
if(T.type != type) 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. //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() /turf/proc/AfterChange(flags) //called after a turf has been replaced in ChangeTurf()
levelupdate() levelupdate()
if(flags & CHANGETURF_RECALC_ADJACENT) ImmediateCalculateAdjacentTurfs()
ImmediateCalculateAdjacentTurfs()
else
CALCULATE_ADJACENT_TURFS(src)
//update firedoor adjacency //update firedoor adjacency
var/list/turfs_to_check = get_adjacent_open_turfs(src) | src var/list/turfs_to_check = get_adjacent_open_turfs(src) | src

View File

@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
add_overlay(/obj/effect/fullbright) add_overlay(/obj/effect/fullbright)
if(requires_activation) if(requires_activation)
CALCULATE_ADJACENT_TURFS(src) ImmediateCalculateAdjacentTurfs()
if (light_power && light_range) if (light_power && light_range)
update_light() update_light()
@@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
/turf/proc/set_temperature() /turf/proc/set_temperature()
/turf/proc/Initalize_Atmos(times_fired) /turf/proc/Initalize_Atmos(times_fired)
CALCULATE_ADJACENT_TURFS(src) ImmediateCalculateAdjacentTurfs()
/turf/Destroy(force) /turf/Destroy(force)
. = QDEL_HINT_IWILLGC . = QDEL_HINT_IWILLGC

View File

@@ -40,21 +40,19 @@
return FALSE return FALSE
/turf/proc/ImmediateCalculateAdjacentTurfs() /turf/proc/ImmediateCalculateAdjacentTurfs()
if(SSair.thread_running())
CALCULATE_ADJACENT_TURFS(src)
return
var/canpass = CANATMOSPASS(src, src) var/canpass = CANATMOSPASS(src, src)
var/canvpass = CANVERTICALATMOSPASS(src, src) var/canvpass = CANVERTICALATMOSPASS(src, src)
for(var/direction in GLOB.cardinals_multiz) for(var/direction in GLOB.cardinals_multiz)
var/turf/T = get_step_multiz(src, direction) var/turf/T = get_step_multiz(src, direction)
if(!istype(T)) if(!istype(T))
continue 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))) ) if(isopenturf(T) && !(blocks_air || T.blocks_air) && ((direction & (UP|DOWN))? (canvpass && CANVERTICALATMOSPASS(T, src)) : (canpass && CANATMOSPASS(T, src))) )
LAZYINITLIST(atmos_adjacent_turfs) LAZYINITLIST(atmos_adjacent_turfs)
LAZYINITLIST(T.atmos_adjacent_turfs) LAZYINITLIST(T.atmos_adjacent_turfs)
atmos_adjacent_turfs[T] = direction atmos_adjacent_turfs[T] = ATMOS_ADJACENT_ANY
T.atmos_adjacent_turfs[src] = opp_dir T.atmos_adjacent_turfs[src] = ATMOS_ADJACENT_ANY
for(var/obj/machinery/door/firedoor/FD in T)
FD.UpdateAdjacencyFlags()
else else
if (atmos_adjacent_turfs) if (atmos_adjacent_turfs)
atmos_adjacent_turfs -= T atmos_adjacent_turfs -= T
@@ -65,7 +63,8 @@
T.__update_auxtools_turf_adjacency_info(isspaceturf(T.get_z_base_turf()), -1) T.__update_auxtools_turf_adjacency_info(isspaceturf(T.get_z_base_turf()), -1)
UNSETEMPTY(atmos_adjacent_turfs) UNSETEMPTY(atmos_adjacent_turfs)
src.atmos_adjacent_turfs = 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())) __update_auxtools_turf_adjacency_info(isspaceturf(get_z_base_turf()))
/turf/proc/set_sleeping(should_sleep) /turf/proc/set_sleeping(should_sleep)

View File

@@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars_by_type, typecacheof_assoc_list(list(
if(toupdate.len) if(toupdate.len)
for(var/turf/T1 in toupdate) for(var/turf/T1 in toupdate)
CALCULATE_ADJACENT_TURFS(T1) T1.ImmediateCalculateAdjacentTurfs()
return copiedobjs return copiedobjs

View File

@@ -952,7 +952,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
playsound(T, 'sound/effects/supermatter.ogg', 50, 1) playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
T.visible_message("<span class='danger'>[T] smacks into [src] and rapidly flashes to ash.</span>",\ T.visible_message("<span class='danger'>[T] smacks into [src] and rapidly flashes to ash.</span>",\
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>") "<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
CALCULATE_ADJACENT_TURFS(T) T.ImmediateCalculateAdjacentTurfs()
//Do not blow up our internal radio //Do not blow up our internal radio
/obj/machinery/power/supermatter_crystal/contents_explosion(severity, target, origin) /obj/machinery/power/supermatter_crystal/contents_explosion(severity, target, origin)

View File

@@ -353,7 +353,6 @@
#include "code\controllers\configuration\entries\vote.dm" #include "code\controllers\configuration\entries\vote.dm"
#include "code\controllers\subsystem\achievements.dm" #include "code\controllers\subsystem\achievements.dm"
#include "code\controllers\subsystem\activity.dm" #include "code\controllers\subsystem\activity.dm"
#include "code\controllers\subsystem\adjacent_air.dm"
#include "code\controllers\subsystem\air.dm" #include "code\controllers\subsystem\air.dm"
#include "code\controllers\subsystem\assets.dm" #include "code\controllers\subsystem\assets.dm"
#include "code\controllers\subsystem\atoms.dm" #include "code\controllers\subsystem\atoms.dm"