Extended map DEPTH: attribute to support branch specifiers and negated depth specifiers.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1442 c06c8d41-db1a-0410-9941-cceddc491573
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC AUYQDKLMOG4FGH2T3LACX4TH632DPKVXBNV5VU6PIVUEWSIO4LQQC AYAQKTO6HOZJ44NDH5UIP6WFNB54Z5EZ4UMUISIQ67ZOIDB6OIQAC OVDIHWR5FEPTBZCTEAXNPB4MYP5NUNPQMC6UM4F6SC4EBGWH3DSQC 6HG6JFO47Y3BZLU7Y6G3R2CX6JFGN4X5PKK6S5IGUXUYQ5GVZYFQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC 34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC MI7CWKRDXHAU7PIHLXXOSFBULRGT2OOMIMOSQLMVYOUVGABIVXGAC NH533CNPGAQGR3QSSXRKCAJHSPVSHSPSTEJXRDIRH5YPKMGMEHVAC A3CO4KBFTFU3ZSHWRY2OPPX3MMTFV7OUCZGL7Q4Y2FU7JO4AP7MAC WKTZHLOJ65WSK6FR5MF7RWGSMZ22T2D6LHB66FV3IPGXIBLYHHNAC JDM27QE4HR52AYFSQE763BFF57ANOTF5MXKMO377PP5EXMN7SAOAC 5E7K2S4F4QDZC5UH3JVMYQ5SFJIKIATZII4EJL7IOT66ZBJ5GUPQC RIRJ746W5ESARX4HUEA4JRVAKXXF3WYVXUCFFONPJMMKWHQAGI2AC RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC TAVHZJPVNJBZR7CUURAOYNDZPNVQ3AGHTXDEP5K4JGYETBLQJDRQC QUYSD2DWCIKAAQJGI43EENAWWPA5W33UT3I5WFRSHU6FPSSXTX2AC XAFFD52IHN6FWFR2TT5F2KCUS7HAVCBI5CWTFMKPQG77GGTGAHLAC 6QWZDCP5HGYLTJO3WWYJJGRRT7QFY6IG64TC7TUB553Z7GAA2HIQC 3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC 25V4IA67QFLZRTBPZLHZ7R2VTFRBBQBE3IS4ASN5BJRBXPEHSALQC LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC JNB3PBPBJHDUHH47ZICB25QENPTMLYK7CXC5BXRVWZ3J3ZZPKCUAC | DEPTH depth_range
| DEPTH extended_depth_ranges {};default_depth_ranges :ext_range{lc_default_depths.push_back($1);}| default_depth_ranges COMMA ext_range{lc_default_depths.push_back($3);};extended_depth_ranges :ext_range{lc_map.add_depth($1);}| extended_depth_ranges COMMA ext_range
depth_range : INTEGER DASH INTEGER
ext_range : lev_range { $$ = $1; }| NOT lev_range { $$ = $2; $$.deny = true; };lev_range : IDENTIFIER{$$ = set_range($1, 1, 100);}| IDENTIFIER COLON STAR{$$ = set_range($1, 1, 100);}| IDENTIFIER COLON INTEGER DASH INTEGER
}level_range::level_range(const raw_range &r): branch(r.branch), shallowest(r.shallowest), deepest(r.deepest),deny(r.deny){}std::string level_range::str_depth_range() const{if (shallowest == -1)return (":??");if (shallowest == 1 && deepest >= branches[branch].depth)return ("");if (shallowest == deepest)return make_stringf(":%d", shallowest);return make_stringf(":%d-%d", shallowest, deepest);}std::string level_range::describe() const{return make_stringf("%s%s%s",deny? "!" : "",branch == NUM_BRANCHES? "Any" :branches[branch].abbrevname,str_depth_range().c_str());}level_range::operator raw_range () const{raw_range r;r.branch = branch;r.shallowest = shallowest;r.deepest = deepest;r.deny = deny;return (r);}void level_range::set(const std::string &br, int s, int d)throw (std::string){if (br == "any" || br == "Any")branch = NUM_BRANCHES;else{if ((branch = str_to_branch(br)) == NUM_BRANCHES)throw make_stringf("Unknown branch: '%s'", br.c_str());}shallowest = s;deepest = d;if (deepest < shallowest)throw make_stringf("Level-range %s:%d-%d is malformed",br.c_str(), s, d);
bool level_range::contains(int x) const
bool level_range::matches(const level_id &lid) const{if (branch == NUM_BRANCHES)return (matches(absdungeon_depth(lid.branch, lid.depth)));elsereturn (branch == lid.branch&& lid.depth >= shallowest && lid.depth <= deepest);}bool level_range::matches(int x) const
}static branch_type str_to_branch(const std::string &branch){for (int i = 0; i < NUM_BRANCHES; ++i){if (branches[i].abbrevname && branches[i].abbrevname == branch)return (static_cast<branch_type>(i));}return (BRANCH_MAIN_DUNGEON);
if (one_chance_in(3)){int mvault = random_map_for_depth(level_number, true);if (mvault != -1)build_minivaults(level_number, mvault);}
minivault_chance = 3;
if (player_in_branch( BRANCH_MAIN_DUNGEON )&& one_chance_in(4)){int mvault = random_map_for_depth(level_number, true);if (mvault != -1){build_minivaults(level_number, mvault);return BUILD_SKIP;}}
minivault_chance = 4;
if (player_in_branch( BRANCH_MAIN_DUNGEON )&& one_chance_in(3)){int mvault = random_map_for_depth(level_number, true);if (mvault != -1){build_minivaults(level_number, mvault);return;}}
xxxxxxxxxxbbbbbbbxxb1...1bxxb.....bxxb.....bxxbb.|.bbxxxb.d.bxxxxb...bxxxxb...bxxxxb.*.bxxxxb...bxxxxx@I@xxx
............xxxxxxxxx..xbbbbbbbx..xb1...1bx..xb.....bx..xb.....bx..xbb.|.bbx..xxb.d.bxx..xxb...bxx..xxb...bxx..xxb.*.bxx..xxb...bxx..xxx@I@xxx............
ENDMAP############################################################################# Minivaults specific to particular branches############################################################################# Orcish mines minivaults:default-depth: Orc:*################################### Dummy Orc minivault balancer.#NAME: mines_dummyTAGS: dummyCHANCE: 100MAPxENDMAP#################################### minvault intended for Orc Mines# pond with fungiNAME: mines1_lemuelMONS: fungus, wandering mushroomSUBST: 1 = . 1 2:4SUBST: ? : w..SUBST: ! : ww.MAP..1...?.........1???1.....1...??ww1.....1wwwwww..11wwwwwwww...www!!wwww...ww!!www1....1ww!ww11..1..1w!!w1.......!!1......1...1!.1..............1
#################################### minvault intended for Orc Mines# hidden treasure chamberNAME: mines2_lemuelSUBST: ? = x.MAP............?x=x?....?xx-xx?..?xx$$$xx?.?xx$$$xx?..?xxxxx?.....???....ENDMAP#################################### minvault intended for Orc Mines# treasure chamber with oklob pantNAME: mines3_lemuelSUBST: ? = +=.SUBST: ! = x.SUBST: $ = $:30 *MONS: oklob plantMAP.....!.!..........!x?x!.........!x.xx!.......!xx..xx!......!xxx..xx!......!xxx.1x!......!xxxx.x!.....!xxxxx.xx!...!xx$$x..xxx..!!xx$$?.xxxx..!xxx$$xxxx!....!xxxxxxx!.................ENDMAP#################################### minvault intended for Orc Mines# mage tower -- either orc with assistants, or ogre with guardsNAME: mines4_lemuelSUBST: ? = +=SUBST: d = $dSUBST: I = IGSHUFFLE: 112/334MONS: orc sorcerer,orc/orc wizard,ogre-mage,ogre/nothingITEM: any bookMAP..................xxxx?xxxx.....xx2.....2xx...xx.2xxxxx2.xx..x..xxd1dxx..x..x.Ix$$G$$xI.x..x..xx222xx..x..xx.2xx?xx2.xx...xx..2.2..xx.....xxxxxxxxx..................ENDMAP#################################### minvault intended for Orc Mines# warg stables, with goblin stableboyNAME: mines5_lemuelSUBST: ?: wxMONS: warg/wolf,goblinMAP............x???????x..xwwwwwwwx..xwwwwwwwx..x1.1.1.1x..x.1.1.1.x..x1.2...1x..xxxx+xxxx............ENDMAP