From 60fbdba8e40f40ac6e1a497210a2fd4f6ac7dfaf Mon Sep 17 00:00:00 2001 From: dshaligram Date: Tue, 27 Mar 2007 10:10:54 +0000 Subject: 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 --- crawl-ref/source/dungeon.cc | 10 +++++++++- crawl-ref/source/util/levcomp.lpp | 13 +++++++++---- crawl-ref/source/util/levcomp.ypp | 30 +++++++++++++++++++++--------- 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] [ \t]+ ; [ \t]*\r?\n { BEGIN(INITIAL); } -[^, \t\r\n][^,\r\n]+[^, \t\r\n] { +[^, \t\r\n][^,\r\n]*[^, \t\r\n] { + settext(); + return ITEM_INFO; + } + +[^, \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() ); } ; -- cgit v1.2.3-54-g00ecf