only really works for non-encompass vaults, and dungeon fixups are not applied (so random deep water -> shallow water conversion, auto-placement of water creatures, etc. will not happen).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1942 c06c8d41-db1a-0410-9941-cceddc491573
FSD7GIK3YLZXWLEH37BU6KV3IUCFGXPQL6IZ7H65YWNRBEKDBX5AC T2AYVN57EFJQLFUFLAZDXKDAFDGTDLQIEQWQZNYFWJZBYSTYH4QQC PISXY4NKSKL5KDJWAHD7CTXWTQDH3NFWQSFAHUAI3VVATWKXRODQC XBSRV4LDUNTV7IYWAUCE7SW3ILWWJUB5ZQCHACLLWBZK5M2WUPDAC TLO257LZSB6ZO36STDUEWJBO2LETXFKTFGXELA6Y4BZBVAEIIINAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC ZVK4J5HTKFNOOIVCI62ZWEYGXEE5TYJ65DLYYZAZWTADFSXE62ZAC ANBVGN4RZOMY5LI4QSHOV2477FN55H353ZYLSVCPTXC7AWWSQZBAC IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC ZJLJGSB2XSBQU42OFQMXL3EG4CXAQGOYAU6YTV2SAWZEJIPFH2CAC JR4ZZK4HOXQIG3WXBGTPZAPPNF7HHBCUZ3TE7RBCS64NHCOX7B2QC 3PY3L3A4QRW3Z5Y7SHO4TMVOOP2VNCO27X2MX4DTOP2SADLBQUOAC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC XY77S75KH5KV54MZVAPMUC64TVRE2QM2KVJAAGJGCIBGQEC5GUTQC WLX2RQMMOMP2PYPAGJRM4VFD2WTLJTOAZZPPY3MV76FU2EGEJ54QC C22455VGUQOSUX2OORA32LROFQ7NNYDMD2ZDTTUZSAQLXK4AD6QAC 2WRXQTGYDBLV46WRNVIUKGNA5QS563XZNNW3N2L6PVOCHIP2YGHQC MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC HZK3YN3SAISTDS5JI4COBYFG7YB4ABDVENXWZZEYLFA2LDI232VAC CUNNC574MESEMTTONZ6YB6CJ2S5P6VA3V7Z3OODESWAK37GYOBPAC QUYSD2DWCIKAAQJGI43EENAWWPA5W33UT3I5WFRSHU6FPSSXTX2AC QFWQG7G6KTZX3GP52K3N4BDWLMNH7A3A5ILJLXDIK6PYYLF3KO3AC AOLWOUIFBQDQTCMSVB7N7GAKFUY5J5LH7CJZAY3HEY3WEUSLADZAC 56C44YMFHZ62GXAAOLYSLLGBVGRWXB53W2VI37Q26ZECEK2XG5SQC UOW2X5KTUHYCM73SWNOSJPHUKWVLF3OJTNSISSSENEURBX2XWHVQC CREW3VTGN2BV622ZXHCPHUEZWBAGEQMNUELDLTHLEKG4VBXGMRPQC 4RFKVDJKTCRBZU6WPJ2E5OVI5IRPY3UTRPOBLC5QHY4CQJJTLZKQC 34C4U6EQWERY75GZJKUCM5KVGU2OUICETS5LGZF6RMKMZT4R5SQAC K6ELQ4HEZYDROC7CJFLPJS64AAJQ4G6RVLL4GBRUG6FJMKSBDDIQC W5WCC5J7PL6IXZ5LPSUWGY3IVQBCTK3FKOD5ADYRWWH2N425NEAAC FMBJCM5LJKCG326YRJGOOJU6QNWONXAHK2AB4CP4SAOHKJ5CORXQC DBGS3HXMW24VO5GBITT3UI2ZNIISUXUHAEAYUI52QPUT7IO46ITQC && grd[i][j] == DNGN_EXIT_PANDEMONIUM)#ifdef WIZARD|| (map_radius == 1000 && you.wizard)#endif)
&& grd[i][j] == DNGN_EXIT_PANDEMONIUM)|| wizard_map)
bool builder(int level_number, int level_type);void level_welcome_messages();void define_zombie(int mid, int ztype, int cs, int power);bool is_wall(int feature);bool place_specific_trap(int spec_x, int spec_y, trap_type spec_type);void place_spec_shop(int level_number, int shop_x, int shop_y,int force_s_type, bool representative = false);bool unforbidden(const coord_def &c, unsigned mask);coord_def dgn_find_nearby_stair(int stair_to_find, bool find_closest);
bool builder(int level_number, int level_type);bool dgn_place_map(int map, bool generating_level, bool clobber);void level_clear_vault_memory();void level_welcome_messages();void define_zombie(int mid, int ztype, int cs, int power);bool is_wall(int feature);bool place_specific_trap(int spec_x, int spec_y, trap_type spec_type);void place_spec_shop(int level_number, int shop_x, int shop_y,int force_s_type, bool representative = false);bool unforbidden(const coord_def &c, unsigned mask);coord_def dgn_find_nearby_stair(int stair_to_find, bool find_closest);
if ((grd[vx][vy] != DNGN_FLOOR&& grd[vx][vy] != DNGN_ROCK_WALL&& grd[vx][vy] != DNGN_CLOSED_DOOR&& grd[vx][vy] != DNGN_SECRET_DOOR&& (!water_ok ||(grd[vx][vy] != DNGN_DEEP_WATER&& grd[vx][vy] != DNGN_SHALLOW_WATER)))|| igrd[vx][vy] != NON_ITEM|| mgrd[vx][vy] != NON_MONSTER)
if ((dfeat != DNGN_FLOOR&& dfeat != DNGN_ROCK_WALL&& dfeat != DNGN_CLOSED_DOOR&& dfeat != DNGN_SECRET_DOOR&& (!water_ok|| (dfeat != DNGN_DEEP_WATER&& dfeat != DNGN_SHALLOW_WATER))&& (!clobber|| (!grid_is_solid(dfeat) && dfeat != DNGN_LAVA&& !grid_is_watery(dfeat))))|| (!clobber&& (igrd[vx][vy] != NON_ITEM|| mgrd[vx][vy] != NON_MONSTER)))
}}static dungeon_feature_type dgn_find_rune_subst(const std::string &tag){const std::string suffix("_entry");const std::string::size_type psuffix = tag.find(suffix);if (psuffix == std::string::npos)return (DNGN_FLOOR);const std::string key = tag.substr(0, psuffix);if (key == "bzr")return (DNGN_ENTER_PORTAL_VAULT);else if (key == "lab")return (DNGN_ENTER_LABYRINTH);else if (key == "hell")return (DNGN_ENTER_HELL);else if (key == "pan")return (DNGN_ENTER_PANDEMONIUM);else if (key == "abyss")return (DNGN_ENTER_ABYSS);else{for (int i = 0; i < NUM_BRANCHES; ++i){if (branches[i].entry_stairs != NUM_FEATURES&& !strcasecmp(branches[i].abbrevname, key.c_str())){return (branches[i].entry_stairs);}}}return (DNGN_FLOOR);}static dungeon_feature_type dgn_find_rune_subst_tags(const std::string &tags){std::vector<std::string> words = split_string(" ", tags);for (int i = 0, size = words.size(); i < size; ++i){const dungeon_feature_type feat = dgn_find_rune_subst(words[i]);if (feat != DNGN_FLOOR)return (feat);
bool dgn_place_map(int map, bool generating_level, bool clobber){const map_def *mdef = map_by_index(map);bool did_map = false;if (mdef->is_minivault())did_map =build_minivaults(you.your_level, map, generating_level, clobber);else{dungeon_feature_type rune_subst = DNGN_FLOOR;if (mdef->has_tag_suffix("_entry"))rune_subst = dgn_find_rune_subst_tags(mdef->tags);did_map = build_secondary_vault(you.your_level, map, rune_subst,generating_level, clobber);}
// Activate any markers within the map.if (did_map){const vault_placement &vp = level_vaults[level_vaults.size() - 1];for (int y = vp.y; y < vp.y + vp.height; ++y){for (int x = vp.x; x < vp.x + vp.width; ++x){std::vector<map_marker *> markers =env_get_markers(coord_def(x, y));for (int i = 0, size = markers.size(); i < size; ++i)markers[i]->activate();if (!see_grid(x, y))set_terrain_changed(x, y);}}}return (did_map);}
if (!generating_level){// Have to link items each square at a time, or// dungeon_terrain_changed could blow up.link_items();const dungeon_feature_type newgrid = grd[vx][vy];grd[vx][vy] = oldgrid;dungeon_terrain_changed(coord_def(vx, vy), newgrid);env_remove_markers_at(coord_def(vx, vy), MAT_ANY);}
}static void debug_load_map_by_name(const std::string &name){level_clear_vault_memory();const int map = find_map_by_name(name);if (map == -1){mprf("Can't find map named '%s'.", name.c_str());return;}if (dgn_place_map(map, false, true))mprf("Successfully placed %s.", map_by_index(map)->name.c_str());elsemprf("Failed to place %s.", map_by_index(map)->name.c_str());}void debug_place_map(){char what_to_make[100];mesclr();mprf(MSGCH_PROMPT, "Enter map name: ");if (cancelable_get_line(what_to_make, sizeof what_to_make)){canned_msg(MSG_OK);return;}std::string what = what_to_make;trim_string(what);if (what.empty()){canned_msg(MSG_OK);return;}debug_load_map_by_name(what);