summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-03-27 10:10:54 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-03-27 10:10:54 +0000
commit60fbdba8e40f40ac6e1a497210a2fd4f6ac7dfaf (patch)
tree095b4b1332d4ed13b4d8394dacaf503b251f5944
parent32c2060ed01ea4a574673cc613e066d63aa407ff (diff)
downloadcrawl-ref-60fbdba8e40f40ac6e1a497210a2fd4f6ac7dfaf.tar.gz
crawl-ref-60fbdba8e40f40ac6e1a497210a2fd4f6ac7dfaf.zip
Allow SUBST and SHUFFLE specs to be comma-separated.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1109 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/dungeon.cc10
-rw-r--r--crawl-ref/source/util/levcomp.lpp13
-rw-r--r--crawl-ref/source/util/levcomp.ypp30
3 files changed, 39 insertions, 14 deletions
diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc
index fd53cb768f..557c24bd33 100644
--- a/crawl-ref/source/dungeon.cc
+++ b/crawl-ref/source/dungeon.cc
@@ -5523,7 +5523,15 @@ static void build_minivaults(int level_number, int force_vault)
no_door_fixup_zones.push_back(
dgn_region( place.x, place.y, place.width, place.height ) );
-
+
+ if (place.map.has_tag("no_monster_gen"))
+ no_monster_zones.push_back(
+ dgn_region( place.x, place.y, place.width, place.height ) );
+
+ if (place.map.has_tag("no_item_gen"))
+ no_item_zones.push_back(
+ dgn_region( place.x, place.y, place.width, place.height ) );
+
if (place.map.has_tag("no_pool_fixup"))
no_pool_fixup_zones.push_back(
dgn_region( place.x, place.y, place.width, place.height ) );
diff --git a/crawl-ref/source/util/levcomp.lpp b/crawl-ref/source/util/levcomp.lpp
index 4cec4b80df..02ad9c2100 100644
--- a/crawl-ref/source/util/levcomp.lpp
+++ b/crawl-ref/source/util/levcomp.lpp
@@ -51,7 +51,7 @@ static void settext()
%s ARGUMENT
%s MNAME
%s KEYWORDS
-%s ITEM_LIST
+%x ITEM_LIST
%option yylineno
%option never-interactive
@@ -81,7 +81,12 @@ NSPACE [^\ \t\r\n]
<KEYWORDS>[ \t]+ ;
<KEYWORDS>[ \t]*\r?\n { BEGIN(INITIAL); }
-<ITEM_LIST>[^, \t\r\n][^,\r\n]+[^, \t\r\n] {
+<ITEM_LIST>[^, \t\r\n][^,\r\n]*[^, \t\r\n] {
+ settext();
+ return ITEM_INFO;
+ }
+
+<ITEM_LIST>[^, \t\r\n] {
settext();
return ITEM_INFO;
}
@@ -121,10 +126,10 @@ PLACE: { BEGIN(ARGUMENT); return PLACE; }
CHANCE: return CHANCE;
FLAGS: return FLAGS;
TAGS: { BEGIN(KEYWORDS); return TAGS; }
-SUBST: { BEGIN(ARGUMENT); return SUBST; }
+SUBST: { BEGIN(ITEM_LIST); return SUBST; }
MONS: { BEGIN(MNAME); return MONS; }
ITEM: { BEGIN(ITEM_LIST); return ITEM; }
-SHUFFLE: { BEGIN(ARGUMENT); return SHUFFLE; }
+SHUFFLE: { BEGIN(ITEM_LIST); return SHUFFLE; }
KFEAT: { BEGIN(ARGUMENT); return KFEAT; }
KITEM: { BEGIN(ARGUMENT); return KITEM; }
diff --git a/crawl-ref/source/util/levcomp.ypp b/crawl-ref/source/util/levcomp.ypp
index aeccfb8aa2..83ae14bf5e 100644
--- a/crawl-ref/source/util/levcomp.ypp
+++ b/crawl-ref/source/util/levcomp.ypp
@@ -161,7 +161,7 @@ metaline : place
| flags
| mons
| items
- | symbol
+ | subst
| tags
| shuffle
| kfeat
@@ -199,15 +199,21 @@ kitem : KITEM { }
$2, err.c_str()).c_str());
}
-shuffle : SHUFFLE { }
- | SHUFFLE STRING
+shuffle : SHUFFLE shuffle_specifiers {}
+ ;
+
+shuffle_specifiers : shuffle_spec
+ | shuffle_spec COMMA shuffle_specifiers
+ ;
+
+shuffle_spec : ITEM_INFO
{
- std::string err = lc_map.map.add_shuffle($2);
+ std::string err = lc_map.map.add_shuffle($1);
if (!err.empty())
yyerror(
make_stringf(
"Bad shuffle argument: '%s' (%s)",
- $2, err.c_str() ).c_str() );
+ $1, err.c_str() ).c_str() );
}
tags : TAGS tagstrings {}
@@ -222,15 +228,21 @@ tagstrings : /* empty */
}
;
-symbol : SUBST {}
- | SUBST STRING
+subst : SUBST subst_specifiers { }
+ ;
+
+subst_specifiers : subst_spec
+ | subst_spec COMMA subst_specifiers
+ ;
+
+subst_spec : ITEM_INFO
{
- std::string err = lc_map.map.add_subst($2);
+ std::string err = lc_map.map.add_subst($1);
if (!err.empty())
yyerror(
make_stringf(
"Bad SUBST argument: '%s' (%s)",
- $2, err.c_str() ).c_str() );
+ $1, err.c_str() ).c_str() );
}
;