summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorEnne Walker <ennewalker@users.sourceforge.net>2009-11-16 16:34:53 -0500
committerEnne Walker <ennewalker@users.sourceforge.net>2009-11-17 12:16:45 -0500
commitf1f15b7afb1a1f8f47fa84f489a13f9cd1f50fcb (patch)
tree111bef4b6166ca11bf1ff2a0a3da0f8a0b3a3481 /crawl-ref
parent840bf56930dfa95308cf3aa9e77e2051868ac568 (diff)
downloadcrawl-ref-f1f15b7afb1a1f8f47fa84f489a13f9cd1f50fcb.tar.gz
crawl-ref-f1f15b7afb1a1f8f47fa84f489a13f9cd1f50fcb.zip
Fixing ziggurats missing fill_area function.
fill_grd_area now fills an area on the dungeon grd. Only Ziggurats use this function.
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/dat/clua/ziggurat.lua10
-rw-r--r--crawl-ref/source/l_dgn.cc27
2 files changed, 32 insertions, 5 deletions
diff --git a/crawl-ref/source/dat/clua/ziggurat.lua b/crawl-ref/source/dat/clua/ziggurat.lua
index 8ac89bc460..52fa64b775 100644
--- a/crawl-ref/source/dat/clua/ziggurat.lua
+++ b/crawl-ref/source/dat/clua/ziggurat.lua
@@ -730,7 +730,7 @@ end
-- builds ziggurat maps consisting of two overimposed rectangles
local function ziggurat_rectangle_builder(e)
local grid = dgn.grid
- dgn.fill_area(0, 0, dgn.GXM - 1, dgn.GYM - 1, "permarock_wall")
+ dgn.fill_grd_area(0, 0, dgn.GXM - 1, dgn.GYM - 1, "permarock_wall")
local area = map_area()
area = math.floor(area*3/4)
@@ -750,7 +750,7 @@ local function ziggurat_rectangle_builder(e)
local b2 = math.floor(b / 2) + (b % 2)
local x1, y1 = clamp_in_bounds(cx - a2, cy - b2)
local x2, y2 = clamp_in_bounds(cx + a2, cy + b2)
- dgn.fill_area(x1, y1, x2, y2, "floor")
+ dgn.fill_grd_area(x1, y1, x2, y2, "floor")
local zig_exc = zig().zig_exc
local nx1 = cx + y1 - cy
@@ -759,7 +759,7 @@ local function ziggurat_rectangle_builder(e)
local ny2 = cy + x2 - cx - math.floor(zig().depth/2*(200-zig_exc)/300)
nx1, ny1 = clamp_in_bounds(nx1, ny1)
nx2, ny2 = clamp_in_bounds(nx2, ny2)
- dgn.fill_area(nx1, ny1, nx2, ny2, "floor")
+ dgn.fill_grd_area(nx1, ny1, nx2, ny2, "floor")
local entry = dgn.point(x1, cy)
local exit = dgn.point(x2, cy)
@@ -779,7 +779,7 @@ end
-- a=b*3/2 for zig_exc=100
local function ziggurat_ellipse_builder(e)
local grid = dgn.grid
- dgn.fill_area(0, 0, dgn.GXM - 1, dgn.GYM - 1, "permarock_wall")
+ dgn.fill_grd_area(0, 0, dgn.GXM - 1, dgn.GYM - 1, "permarock_wall")
local zig_exc = zig().zig_exc
@@ -813,7 +813,7 @@ end
-- builds hexagonal ziggurat maps
local function ziggurat_hexagon_builder(e)
local grid = dgn.grid
- dgn.fill_area(0, 0, dgn.GXM - 1, dgn.GYM - 1, "permarock_wall")
+ dgn.fill_grd_area(0, 0, dgn.GXM - 1, dgn.GYM - 1, "permarock_wall")
local zig_exc = zig().zig_exc
diff --git a/crawl-ref/source/l_dgn.cc b/crawl-ref/source/l_dgn.cc
index fa32c9da4d..cef4fd1acd 100644
--- a/crawl-ref/source/l_dgn.cc
+++ b/crawl-ref/source/l_dgn.cc
@@ -1582,6 +1582,31 @@ LUAFN(_dgn_reuse_map)
LUAWRAP(_dgn_reset_level, dgn_reset_level())
+LUAFN(dgn_fill_grd_area)
+{
+ int x1 = luaL_checkint(ls, 1);
+ int y1 = luaL_checkint(ls, 2);
+ int x2 = luaL_checkint(ls, 3);
+ int y2 = luaL_checkint(ls, 4);
+ dungeon_feature_type feat = check_lua_feature(ls, 5);
+
+ x1 = std::min(std::max(x1, X_BOUND_1+1), X_BOUND_2-1);
+ y1 = std::min(std::max(y1, Y_BOUND_1+1), Y_BOUND_2-1);
+ x2 = std::min(std::max(x2, X_BOUND_1+1), X_BOUND_2-1);
+ y2 = std::min(std::max(y2, Y_BOUND_1+1), Y_BOUND_2-1);
+
+ if (x2 < x1)
+ std::swap(x1, x2);
+ if (y2 < y1)
+ std::swap(y1, y2);
+
+ for (int y = y1; y <= y2; y++)
+ for (int x = x1; x <= x2; x++)
+ grd[x][y] = feat;
+
+ return (0);
+}
+
const struct luaL_reg dgn_dlib[] =
{
{ "reset_level", _dgn_reset_level },
@@ -1669,5 +1694,7 @@ const struct luaL_reg dgn_dlib[] =
{ "get_special_room_info", dgn_get_special_room_info },
+{ "fill_grd_area", dgn_fill_grd_area },
+
{ NULL, NULL }
};