diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm index 158c66754e18..1b549440deee 100644 --- a/code/__DEFINES/turfs.dm +++ b/code/__DEFINES/turfs.dm @@ -1,15 +1,16 @@ -#define RANGE_TURFS(RADIUS, CENTER) \ - block( \ - (CENTER).x-(RADIUS), (CENTER).y-(RADIUS), (CENTER).z, \ - (CENTER).x+(RADIUS), (CENTER).y+(RADIUS), (CENTER).z \ - ) - +/// Returns a list of turfs within H_RADIUS tiles horizontally and V_RADIUS tiles vertically of CENTER. #define RECT_TURFS(H_RADIUS, V_RADIUS, CENTER) \ block( \ (CENTER).x-(H_RADIUS), (CENTER).y-(V_RADIUS), (CENTER).z, \ (CENTER).x+(H_RADIUS), (CENTER).y+(V_RADIUS), (CENTER).z \ ) +/// Returns a list of turfs within Dist tiles of Center. When Dist >= 5 faster than a `range()` filtered to `/turf`s. +#define RANGE_TURFS(Dist, Center) RECT_TURFS(Dist, Dist, Center) + +/// Returns a list of turfs within Dist tiles of Center, excluding Center. When Dist >= 5 faster than an `orange()` filtered to `/turf`s. +#define ORANGE_TURFS(Dist, Center) (RANGE_TURFS(Dist, Center) - Center) + ///Returns all turfs in a zlevel #define Z_TURFS(ZLEVEL) block(1, 1, (ZLEVEL), world.maxx, world.maxy, (ZLEVEL)) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 094f8205c80e..ba27d4192ded 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -45,7 +45,7 @@ var/list/turfs = new/list() var/rsq = radius * (radius+0.5) - for(var/turf/T in range(radius, centerturf)) + for(var/turf/T as anything in RANGE_TURFS(radius, centerturf)) var/dx = T.x - centerturf.x var/dy = T.y - centerturf.y if(dx*dx + dy*dy <= rsq) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 71355fc86db8..1782e7f53e03 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1289,10 +1289,7 @@ GLOBAL_LIST_INIT(WALLITEMS, list( origin = get_turf(origin) if(!origin) return - var/list/turfs = list() - for(var/turf/T in orange(origin, outer_range)) - if(!inner_range || get_dist(origin, T) >= inner_range) - turfs += T + var/list/turfs = (RANGE_TURFS(outer_range, origin) - RANGE_TURFS(inner_range - 1, origin)) if(length(turfs)) return pick(turfs) diff --git a/code/game/machinery/door_display/door_display.dm b/code/game/machinery/door_display/door_display.dm index 4624ba5f1bd2..529ac6f95959 100644 --- a/code/game/machinery/door_display/door_display.dm +++ b/code/game/machinery/door_display/door_display.dm @@ -203,7 +203,7 @@ if(F.id == id) targets += F if(has_wall_divider) - for(var/turf/closed/wall/almayer/research/containment/wall/divide/W in orange(src, 8)) + for(var/turf/closed/wall/almayer/research/containment/wall/divide/W in ORANGE_TURFS(8, src)) targets += W /obj/structure/machinery/door_display/research_cell/Destroy() diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 27bb58397956..9ca1fb064568 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -87,10 +87,7 @@ return located_turfs /obj/structure/machinery/door/proc/borders_space() - for(var/turf/target in range(1, src)) - if(istype(target, /turf/open/space)) - return TRUE - return FALSE + return !!(locate(/turf/open/space) in range(1, src)) /obj/structure/machinery/door/Collided(atom/movable/AM) if(panel_open || operating) diff --git a/code/game/objects/items/devices/teleportation.dm b/code/game/objects/items/devices/teleportation.dm index d64e717a3095..003f3152800d 100644 --- a/code/game/objects/items/devices/teleportation.dm +++ b/code/game/objects/items/devices/teleportation.dm @@ -152,7 +152,7 @@ else L["[com.id] (Inactive)"] = com.locked var/list/turfs = list( ) - for(var/turf/T in orange(10)) + for(var/turf/T as anything in ORANGE_TURFS(10, src)) if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb if(T.y>world.maxy-8 || T.y<8) continue turfs += T diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm index 55ed8c8d34f0..7f05128c7e1b 100644 --- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm +++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm @@ -584,19 +584,14 @@ src.visible_message(SPAN_NOTICE("The [src.name] has been squashed."),SPAN_MODERATE("You hear a smack.")) qdel(src) return - for(var/turf/T in orange(M,outer_teleport_radius)) - if(T in orange(M,inner_teleport_radius)) continue + for(var/turf/T as anything in (RANGE_TURFS(outer_teleport_radius, M) - RANGE_TURFS(inner_teleport_radius, M))) if(istype(T,/turf/open/space)) continue if(T.density) continue if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.y 0) handle_side_effects(host_box, TRUE) - var/list/turf_list = list() - for(var/turf/T in range(5, (host_box ? host_box : src))) - turf_list += T + var/list/turf_list = RANGE_TURFS(5, (host_box ? host_box : src)) for(var/i = 1, i <= flare_amount, i++) addtimer(CALLBACK(src, PROC_REF(explode), (host_box ? host_box : src), turf_list), rand(1, 6) SECONDS) return