diff --git a/code/modules/multiz/basic.dm b/code/modules/multiz/basic.dm index 0ed4e5364a5..62ffc46518a 100644 --- a/code/modules/multiz/basic.dm +++ b/code/modules/multiz/basic.dm @@ -1,25 +1,27 @@ // If you add a more comprehensive system, just untick this file. -// WARNING: Only works for up to 17 z-levels! -var/z_levels = 0 // Each bit represents a connection between adjacent levels. So the first bit means levels 1 and 2 are connected. +var/list/z_levels = list()// Each bit re... haha just kidding this is a list of bools now // If the height is more than 1, we mark all contained levels as connected. /obj/effect/landmark/map_data/New() - ASSERT(height <= z) - // Due to the offsets of how connections are stored v.s. how z-levels are indexed, some magic number silliness happened. - for(var/i = (z - height) to (z - 2)) - z_levels |= (1 << i) - qdel(src) + for(var/i = (z - height + 1) to (z-1)) + if (z_levels.len = world.maxz || z > 16 || z < 1) + if(z >= world.maxz || z < 1 || z > z_levels.len) return 0 - return z_levels & (1 << (z - 1)) + return z_levels[z] /proc/HasBelow(var/z) - if(z > world.maxz || z > 17 || z < 2) + if(z > world.maxz || z < 2 || (z-1) > z_levels.len) return 0 - return z_levels & (1 << (z - 2)) + return z_levels[z-1] // Thankfully, no bitwise magic is needed here. /proc/GetAbove(var/atom/atom)