mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-22 04:22:39 +01:00
Merge pull request #4306 from Lohikar/movable_sanity
changes: ZAS knockdown is now only applied to movables that are within 16 tiles of one of the edge's turfs. There's probably faster ways to do this, but this should be fine for now. Fixes #2917.
This commit is contained in:
+16
-8
@@ -133,13 +133,21 @@ mob/living/carbon/human/airflow_hit(atom/A)
|
||||
Stun(round(airflow_speed * vsc.airflow_stun/2))
|
||||
. = ..()
|
||||
|
||||
zone/proc/movables()
|
||||
zone/proc/movables(list/origins)
|
||||
. = list()
|
||||
for(var/turf/T in contents)
|
||||
CHECK_TICK
|
||||
if (!origins || !origins.len)
|
||||
return
|
||||
|
||||
for(var/aa in T)
|
||||
var/atom/movable/A = aa
|
||||
if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/abstract/eye))
|
||||
continue
|
||||
. += A
|
||||
var/static/list/movables_tcache = typecacheof(list(/obj/effect, /mob/abstract))
|
||||
|
||||
var/atom/movable/AM
|
||||
for (var/testing_turf in contents)
|
||||
for (var/am in testing_turf)
|
||||
AM = am
|
||||
if (AM.simulated && !AM.anchored && !movables_tcache[AM.type])
|
||||
for (var/source_turf in origins)
|
||||
if (get_dist(testing_turf, source_turf) <= EDGE_KNOCKDOWN_MAX_DISTANCE)
|
||||
.[AM] = TRUE
|
||||
break
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
@@ -169,11 +169,11 @@ Class Procs:
|
||||
var/list/attracted
|
||||
var/list/repelled
|
||||
if(differential > 0)
|
||||
attracted = A.movables()
|
||||
repelled = B.movables()
|
||||
attracted = A.movables(connecting_turfs)
|
||||
repelled = B.movables(connecting_turfs)
|
||||
else
|
||||
attracted = B.movables()
|
||||
repelled = A.movables()
|
||||
attracted = B.movables(connecting_turfs)
|
||||
repelled = A.movables(connecting_turfs)
|
||||
|
||||
// These are async, with waitfor = FALSE
|
||||
flow(attracted, abs(differential), 0)
|
||||
@@ -239,7 +239,7 @@ Class Procs:
|
||||
|
||||
var/differential = A.air.return_pressure() - air.return_pressure()
|
||||
if(abs(differential) >= vsc.airflow_lightest_pressure)
|
||||
var/list/attracted = A.movables()
|
||||
var/list/attracted = A.movables(connecting_turfs)
|
||||
// This call is async, with waitfor = FALSE
|
||||
flow(attracted, abs(differential), differential < 0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user