Places are saved as level_ids, not strings.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1776 c06c8d41-db1a-0410-9941-cceddc491573
ANBVGN4RZOMY5LI4QSHOV2477FN55H353ZYLSVCPTXC7AWWSQZBAC
45FTVJJ5FMXBXQ2GVUZVJZU6Y6NUYG2JZIHWVMONA7QYYCZQSM2QC
4RFKVDJKTCRBZU6WPJ2E5OVI5IRPY3UTRPOBLC5QHY4CQJJTLZKQC
6HG6JFO47Y3BZLU7Y6G3R2CX6JFGN4X5PKK6S5IGUXUYQ5GVZYFQC
5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
WX2VFNANQZ3IRHBXSLKJT3G3OAQREAZISXLOTG6JO7KXFBHQFOYAC
6QWZDCP5HGYLTJO3WWYJJGRRT7QFY6IG64TC7TUB553Z7GAA2HIQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
KXUQB3WNWC5IFL6VFWADEPQMMU3VV3NDI5FLA666PGOEWFYUHCLQC
AYAQKTO6HOZJ44NDH5UIP6WFNB54Z5EZ4UMUISIQ67ZOIDB6OIQAC
RGHXFBNIULRVRYLBGG5JZDMYVM2E2JJ2Y5KQPMU6PUS3V26G6ZXQC
MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC
NCDWWDJQLAU5ORSAQGZKJJ5E22VTDGGPJMVVBWQFHQ2B3U3UFHDQC
U7BN4TQ36FIOAGBVWQ4A6VXFZN2GETLGCLD4E3MCBA7OQ3TXYUXQC
5P64LHKJKGKIO3FUV63KFQ2OHZ5RNRV7WXS25OHXVNYYFZAVGLMAC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC
SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC
KAGDUJFWWZGGIYQECFGRHNSQT47XIUN3ZTSETAIWLYIZ43QXGQ2AC
ENXH3WOZDV5SVVQ2WIGVUOUZ7LEIEOGBHVOY7TD6DUSJEJGXU33QC
KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC
JNB3PBPBJHDUHH47ZICB25QENPTMLYK7CXC5BXRVWZ3J3ZZPKCUAC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
Q5SFQO7ANODRI6OXKHPFQ4QWKGQ367S64DPURQW2TWK7ANTYO4NQC
34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC
MI7CWKRDXHAU7PIHLXXOSFBULRGT2OOMIMOSQLMVYOUVGABIVXGAC
H3552BCIAVBLKAYKE4DHFLBLFW5RGRMYBMRRYHYEB5IPIJRUVU5QC
}
level_id level_id::parse_level_id(const std::string &s) throw (std::string)
{
std::string::size_type cpos = s.find(':');
std::string branch =
cpos != std::string::npos? s.substr(0, cpos) : s;
std::string depth =
cpos != std::string::npos? s.substr(cpos + 1) : "";
if (branch == "Abyss")
return (level_id(LEVEL_ABYSS));
else if (branch == "Pan")
return (level_id(LEVEL_PANDEMONIUM));
else if (branch == "Lab")
return (level_id(LEVEL_LABYRINTH));
const branch_type br = str_to_branch(branch);
if (br == NUM_BRANCHES)
throw make_stringf("Invalid branch \"%s\" in spec \"%s\"",
branch.c_str(), s.c_str());
const int dep =
depth.empty()? 1 :
depth == "$" ? branches[br].depth :
atoi(depth.c_str());
if (dep < 0 || dep > branches[br].depth)
throw make_stringf("Invalid depth for %s in spec \"%s\"",
branch.c_str(), s.c_str());
return level_id(br, dep);
int random_map_for_place(const std::string &place, bool mini = false);
int random_map_for_depth(const level_id &lid, bool want_minivault = false);
int random_map_for_place(const level_id &place, bool mini = false);
int random_map_in_depth(const level_id &lid, bool want_minivault = false);
static std::string level_name(int subdepth)
{
return place_name(
get_packed_place(
you.where_are_you, subdepth, you.level_type ) );
}
int subdepth = subdungeon_depth(you.where_are_you, level_number);
const std::string name = level_name(subdepth);
std::string altname;
// This dodge allows designers to specify PLACE: as Elf:$ or Slime:$ or
// whatever:$ to say "last level in branch 'whatever'".
if (subdepth == your_branch().depth)
altname = level_name(0);
int vault = random_map_for_place(name, wantmini);
if (vault == -1)
vault = random_map_for_place(altname, wantmini);
const level_id lid = level_id::current();
int vault = random_map_for_place(lid, wantmini);