summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dat/clua/dungeon.lua
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/dat/clua/dungeon.lua')
-rw-r--r--crawl-ref/source/dat/clua/dungeon.lua42
1 files changed, 42 insertions, 0 deletions
diff --git a/crawl-ref/source/dat/clua/dungeon.lua b/crawl-ref/source/dat/clua/dungeon.lua
index 7fe2b30a22..d26bba984b 100644
--- a/crawl-ref/source/dat/clua/dungeon.lua
+++ b/crawl-ref/source/dat/clua/dungeon.lua
@@ -59,4 +59,46 @@ function dgn_run_map(prelude, main)
return setfenv(main, env)()
end
end
+end
+
+--------------------------------------------------------------------
+
+function dgn.places_connected(map, map_glyph, test_connect, ...)
+ local points = { }
+ for _, glyph in ipairs( { ... } ) do
+ local x, y = map_glyph(map, glyph)
+ if x and y then
+ table.insert(points, x)
+ table.insert(points, y)
+ else
+ error("Can't find coords for '" .. glyph .. "'")
+ end
+ end
+ return test_connect(map, unpack(points))
+end
+
+function dgn.glyphs_connected(map, ...)
+ return dgn.places_connected(map, dgn.gly_point, dgn.points_connected, ...)
+end
+
+function dgn.orig_glyphs_connected(map, ...)
+ return dgn.places_connected(map, dgn.orig_gly_point,
+ dgn.points_connected, ...)
+end
+
+function dgn.orig_fn(map, fnx, ...)
+ local original = dgn.original_map(map)
+ if not original then
+ error("Can't find original map for map '" .. dgn.name(map) .. "'")
+ end
+
+ return fnx(original, ...)
+end
+
+function dgn.orig_gly_point(map, glyph)
+ return dgn.orig_fn(map, dgn.gly_point, glyph)
+end
+
+function dgn.orig_gly_points(map, glyph)
+ return dgn.orig_fn(map, dgn.gly_points, glyph)
end \ No newline at end of file