summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dat
diff options
context:
space:
mode:
authorinfiniplex <infiniplex@hotmail.com>2014-07-24 22:56:48 -0600
committerreaverb <reaverb.Crawl@gmail.com>2014-07-25 02:46:44 -0400
commit1ac2e529bed68dd20f71cff7be30ba0072fa059e (patch)
tree4a7be46f3c9d719065c976512942d2c0fe37e979 /crawl-ref/source/dat
parentcc8d6ef1a9a08f1e3ddb6d5f29ab5323a9f79d0d (diff)
downloadcrawl-ref-1ac2e529bed68dd20f71cff7be30ba0072fa059e.tar.gz
crawl-ref-1ac2e529bed68dd20f71cff7be30ba0072fa059e.zip
Standardize forbiddance of very small maps
Diffstat (limited to 'crawl-ref/source/dat')
-rw-r--r--crawl-ref/source/dat/des/builder/layout.des13
-rw-r--r--crawl-ref/source/dat/des/builder/layout_caves.des16
-rw-r--r--crawl-ref/source/dat/des/builder/layout_halls.des17
-rw-r--r--crawl-ref/source/dat/des/builder/layout_overlapping_boxes.des5
-rw-r--r--crawl-ref/source/dat/des/builder/layout_pools.des12
-rw-r--r--crawl-ref/source/dat/dlua/layout/minimum_map_area.lua51
6 files changed, 100 insertions, 14 deletions
diff --git a/crawl-ref/source/dat/des/builder/layout.des b/crawl-ref/source/dat/des/builder/layout.des
index 90fa1c1575..ad2af7f2c6 100644
--- a/crawl-ref/source/dat/des/builder/layout.des
+++ b/crawl-ref/source/dat/des/builder/layout.des
@@ -8,6 +8,7 @@
: require("dlua/layout/zonify.lua")
: require("dlua/layout/theme.lua")
+: require("dlua/layout/minimum_map_area.lua")
{{
-- Call func num times around a circle of radius centered at (x, y)
@@ -232,6 +233,8 @@ ENDMAP
# TODO: Use "layout_type_open_caves" tag for cave version and
# "layout_type_open" tag for non-cave version.
#
+# TODO: A better way of preventing small maps
+#
NAME: layout_big_octagon
DEPTH: D:9-, Depths, Pan
WEIGHT: 3
@@ -422,6 +425,10 @@ TAGS: uniq_open_layout
theme.level_material(_G)
}}
+# Enforce minimum floor size - otherwise we get very tiny floors sometimes
+validate {{
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.OPEN)
+}}
MAP
ENDMAP
@@ -843,7 +850,7 @@ TAGS: overwritable layout allow_dup unrand layout_type_open_caves
}}
# Enforce minimum floor size - otherwise we get very tiny floors sometimes
validate {{
- return count_feature_in_box { feat="." } > 600
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.OPEN_CAVES)
}}
MAP
ENDMAP
@@ -1466,7 +1473,7 @@ TAGS: no_rotate no_vmirror no_hmirror
}}
# Enforce minimum floor size - this is important with the alt version
validate {{
- return count_feature_in_box { feat="." } > 1200
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.DIVISIONS)
}}
COLOUR: G : cyan
TILE: G = dngn_statue_iron_golem
@@ -1913,7 +1920,7 @@ TAGS: no_rotate no_hmirror no_vmirror
}}
# Enforce minimum floor size - this is important
validate {{
- return count_feature_in_box { feat="." } > 600
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.NARROW_CAVES)
}}
MAP
ENDMAP
diff --git a/crawl-ref/source/dat/des/builder/layout_caves.des b/crawl-ref/source/dat/des/builder/layout_caves.des
index 1032423476..0a6f3d8922 100644
--- a/crawl-ref/source/dat/des/builder/layout_caves.des
+++ b/crawl-ref/source/dat/des/builder/layout_caves.des
@@ -9,6 +9,7 @@
: require("dlua/layout/hyper.lua")
: require("dlua/layout/hyper_caves.lua")
: require("dlua/layout/theme.lua")
+: require("dlua/layout/minimum_map_area.lua")
##############################################################
# layout_layer_cave
@@ -22,8 +23,6 @@ WEIGHT: 20, 15 (Snake)
ORIENT: encompass
TAGS: overwritable layout allow_dup unrand layout_type_narrow_caves
{{
- if is_validating() then return; end
-
local gxm,gym = dgn.max_bounds()
-- First pass
@@ -97,6 +96,12 @@ TAGS: overwritable layout allow_dup unrand layout_type_narrow_caves
theme.D.caves(_G)
}}
+# Enforce minimum floor size - otherwise we get very tiny floors sometimes
+validate {{
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.NARROW_CAVES)
+}}
+MAP
+ENDMAP
##############################################################
# layout_cave_shapes
@@ -309,6 +314,13 @@ TAGS: overwritable layout allow_dup unrand no_pool_fixup layout_type_swamp
remove_isolated_glyphs { find = "W", percent = 80 }
zonify.grid_fill_water_zones(1,"t")
}}
+# Enforce minimum floor size - otherwise we get very tiny floors sometimes
+validate {{
+ -- If we try to validate the map before without creating it,
+ -- we get a crash at start
+ if is_validating() then return end
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.SWAMP, ".W")
+}}
##############################################################
# layout_cave_pods
diff --git a/crawl-ref/source/dat/des/builder/layout_halls.des b/crawl-ref/source/dat/des/builder/layout_halls.des
index 9bfc89b1fd..57e3292739 100644
--- a/crawl-ref/source/dat/des/builder/layout_halls.des
+++ b/crawl-ref/source/dat/des/builder/layout_halls.des
@@ -9,6 +9,7 @@
: require("dlua/layout/procedural_transform.lua")
: require("dlua/layout/zonify.lua")
: require("dlua/layout/theme.lua")
+: require("dlua/layout/minimum_map_area.lua")
{{
@@ -339,6 +340,13 @@ TAGS: overwritable layout allow_dup unrand layout_type_open_caves
zonify.map_fill_zones(_G, 1, 'x')
theme.level_material(_G)
}}
+# Enforce minimum floor size - otherwise we get very tiny floors sometimes
+validate {{
+ -- If we try to validate the map before without creating it,
+ -- we get a crash at start
+ if is_validating() then return end
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.OPEN_CAVES, ".W")
+}}
##############################################################
# layout_onion_interference
@@ -346,6 +354,8 @@ TAGS: overwritable layout allow_dup unrand layout_type_open_caves
# Layers two onions on top of each other to create an
# interference pattern (with option xor)
#
+# TODO: A better way of dealing with small maps
+#
NAME: layout_onion_interference
DEPTH: Snake, Zot:1-4
WEIGHT: 10
@@ -400,7 +410,7 @@ TAGS: overwritable layout allow_dup unrand central layout_type_narrow_caves
zonify.map_fill_zones(_G, 1, 'x')
}}
validate {{
- return count_feature_in_box { feat="." } >= 750
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.NARROW_CAVES)
}}
##############################################################
@@ -528,6 +538,7 @@ ENDMAP
#
# TODO: Use Snake variant in Lair, add with weight 3.
# TODO: Minimum area validation in Snake (can be disconnected).
+# Then remove minimum size validate as unneeded
#
NAME: layout_concentric_octagons
DEPTH: Snake, Zot
@@ -816,3 +827,7 @@ TAGS: no_rotate no_vmirror no_hmirror
mapgrd[gxm/2][gym/2] = '.'
end
}}
+# Enforce minimum floor size - remove when connection is working in Snake
+validate {{
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.PASSAGES)
+}}
diff --git a/crawl-ref/source/dat/des/builder/layout_overlapping_boxes.des b/crawl-ref/source/dat/des/builder/layout_overlapping_boxes.des
index 6660c6e04b..105b74be3c 100644
--- a/crawl-ref/source/dat/des/builder/layout_overlapping_boxes.des
+++ b/crawl-ref/source/dat/des/builder/layout_overlapping_boxes.des
@@ -7,7 +7,10 @@
# out looking like a more regular form of layout_subdivisions
# with some of the rooms connected into open areas.
#
+
: require("dlua/layout/zonify.lua")
+: require("dlua/layout/minimum_map_area.lua")
+
NAME: layout_overlapping_boxes
DEPTH: Dis:1-6
WEIGHT: 5
@@ -56,7 +59,7 @@ TAGS: no_rotate no_vmirror no_hmirror
}}
# Enforce minimum floor size
validate {{
- return count_feature_in_box { feat="." } > 1200
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.DIVISIONS)
}}
MAP
ENDMAP
diff --git a/crawl-ref/source/dat/des/builder/layout_pools.des b/crawl-ref/source/dat/des/builder/layout_pools.des
index e7591e76a3..4c326052b4 100644
--- a/crawl-ref/source/dat/des/builder/layout_pools.des
+++ b/crawl-ref/source/dat/des/builder/layout_pools.des
@@ -10,6 +10,7 @@
: require("dlua/layout/zonify.lua")
: require("dlua/layout/theme.lua")
+: require("dlua/layout/minimum_map_area.lua")
##############################################################
#
@@ -38,9 +39,6 @@
-- longer and thus harder
STAIRS_PLACE_PERCENT = 20
- -- The minimum floor area for a layout
- FLOOR_AREA_MINIMUM = 750
-
-- The width of the path before the caves are grown is
-- 1 + 2 * PATH_SIZE_???
PATH_SIZE_BASIC = 2
@@ -191,7 +189,7 @@ TAGS: no_rotate no_vmirror no_hmirror
}}
# Enforce minimum floor size - this is important
validate {{
- return count_feature_in_box { feat="." } > 600
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.DIVISIONS)
}}
MAP
ENDMAP
@@ -328,7 +326,7 @@ TAGS: no_rotate no_vmirror no_hmirror
gehenna_layout_epilogue(_G)
}}
validate {{
- return count_feature_in_box { feat="." } >= FLOOR_AREA_MINIMUM
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.OPEN_CAVES)
}}
##############################################################
@@ -402,7 +400,7 @@ TAGS: no_rotate no_vmirror no_hmirror
gehenna_layout_epilogue(_G)
}}
validate {{
- return count_feature_in_box { feat="." } >= FLOOR_AREA_MINIMUM
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.OPEN_CAVES)
}}
##############################################################
@@ -535,5 +533,5 @@ TAGS: no_rotate no_vmirror no_hmirror
gehenna_layout_epilogue(_G)
}}
validate {{
- return count_feature_in_box { feat="." } >= FLOOR_AREA_MINIMUM
+ return minimum_map_area.is_map_big_enough(_G, minimum_map_area.OPEN_CAVES)
}}
diff --git a/crawl-ref/source/dat/dlua/layout/minimum_map_area.lua b/crawl-ref/source/dat/dlua/layout/minimum_map_area.lua
new file mode 100644
index 0000000000..480f00419a
--- /dev/null
+++ b/crawl-ref/source/dat/dlua/layout/minimum_map_area.lua
@@ -0,0 +1,51 @@
+------------------------------------------------------------------------------
+-- minimum_map_area.lua: Constants and a function to enforce minimum map size.
+--
+------------------------------------------------------------------------------
+
+minimum_map_area = {}
+
+--
+-- The minimum area for each map type
+--
+
+minimum_map_area.BASE_AREA = 600
+
+minimum_map_area.CORRIDORS = minimum_map_area.BASE_AREA * 0.75
+minimum_map_area.ROOMS = minimum_map_area.BASE_AREA
+minimum_map_area.PASSAGES = minimum_map_area.BASE_AREA
+minimum_map_area.NARROW_CAVES = minimum_map_area.BASE_AREA
+minimum_map_area.OPEN_CAVES = minimum_map_area.BASE_AREA * 1.5
+minimum_map_area.CITY = minimum_map_area.BASE_AREA * 2
+minimum_map_area.OPEN = minimum_map_area.BASE_AREA * 2
+minimum_map_area.DIVISIONS = minimum_map_area.BASE_AREA * 1.5
+minimum_map_area.SWAMP = minimum_map_area.BASE_AREA
+
+
+
+--
+-- is_map_big_enough
+--
+-- This function returns whether the map is big enough to be a
+-- map of the specified type.
+--
+-- Parameter(s):
+-- -> e: A reference to the gobal enviroment. Pass in _G
+-- -> min_area: The minimum area for this map type
+-- Defaults to BASE_AREA
+-- -> floor: The glyphs to treat as floor glyphs
+-- Defaults to ".{([})]<>"
+--
+-- Returns: true if the map is large enough, false otherwise.
+--
+
+minimum_map_area.is_map_big_enough = function (e, min_area, floor)
+ if min_area == nil then
+ min_area = BASE_AREA
+ end
+ if floor == nil then
+ floor = ".{([})]<>"
+ end
+
+ return e.count_feature_in_box { feat = floor } > min_area
+end