From f1f15b7afb1a1f8f47fa84f489a13f9cd1f50fcb Mon Sep 17 00:00:00 2001 From: Enne Walker Date: Mon, 16 Nov 2009 16:34:53 -0500 Subject: Fixing ziggurats missing fill_area function. fill_grd_area now fills an area on the dungeon grd. Only Ziggurats use this function. --- crawl-ref/source/dat/clua/ziggurat.lua | 10 +++++----- crawl-ref/source/l_dgn.cc | 27 +++++++++++++++++++++++++++ 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 } }; -- cgit v1.2.3-54-g00ecf