the entrance to any level; can also enter 0 at the depth prompt to go to a branch entrance.)
Also (experimentally) unifies the level-map and interlevel travel targets.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1754 c06c8d41-db1a-0410-9941-cceddc491573
45FTVJJ5FMXBXQ2GVUZVJZU6Y6NUYG2JZIHWVMONA7QYYCZQSM2QC SOGYI2OBNZHL6HZN3ZJR5ITQHTYITILKR4D4EZPKBO23UYZW3JQAC 777QS3HZPW7YHEZPCMEOFVMAPW47RHZNUMBKERJEGOTOG4B54CEAC YQDXXS2M7PYVJHY6KAHSRKE5ZRC6T72W7LTGNRVPKCSP5VATWAVAC KL3WT33GGILCQNODQUHKJBVI7UCDRQCWCTYCUGDQPDIMUPV73W7AC QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC ZHFUXYUHS6V47WK2NRH7OU6RX77NRKTXOZC3MND2GG7PEEWSGFTAC IPXXB4VRVZWOU5DKQ5ZTD37LS3QNK2R6APNZUO672YEEJT6OFAYQC 6HG6JFO47Y3BZLU7Y6G3R2CX6JFGN4X5PKK6S5IGUXUYQ5GVZYFQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC T4IH76FA5TWHFOZUJFHLQXQJENJHWTUZZP4EGNA7D4GTZY7D4ZKAC 5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC M47QBURKKRV2JFK6U7GQNVWK7RUTBVPBJ5FHURC55SKQSXAUFSBAC Y66ZAXN24E3HLIBOSW4OXUTQ4X4PRGNJII4KVDQH4GQJVA6GO3NAC XP3TQISCLEST3ZNTF6OZ6FYMHIIPMVTNVBIIG47LA5PS7J234SQAC V6S33CAMTUXXDETG654VX2K4DA25DI6KFBTKPM2EGFDIBMAU4TJAC SCWXQW5H65OXUP2MEJ2MEEAVPSRJDT3RQGKYCMKVTORS2334PQSQC GACH6PWPGGUBEE7PFEPQMOZKSR7HTQGL2WLGF2AQPJD3FCCSKZNQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC // Get the LevelInfo for the specified level (defaults to the current// level).LevelInfo& get_level_info(branch_type branch = BRANCH_MAIN_DUNGEON,int depth = -1){return get_level_info( level_id(branch, depth) );}
&& (travel_target.pos.x != you.x_pos|| travel_target.pos.y != you.y_pos|| travel_target.id !=level_id::current()))
&& (level_target.p.pos != you.pos()|| level_target.p.id != level_id::current()))
return CMD_NO_CMD;
return (CMD_NO_CMD);}// Check for entrance-only thang. If we've reached the// entrance, kill travel.if (level_target.entrance_only){LevelInfo &li =travel_cache.get_level_info(level_id::current());const stair_info *si = li.get_stair(you.pos());if (si && si->destination.id == level_target.p.id){you.running = runmode;stop_running();return (CMD_NO_CMD);}
// Show level+depth information and tack on an @(x,y) if the player// wants to go to a specific square on the target level. We don't use// actual coordinates since that will give away level information we// don't want the player to have.if ( branches[branch_id].depth != 1 )snprintf(buffer, maxlen, "%s:%d%s", branch, target.id.depth,target.pos.x != -1? " @ (x,y)" : "");elsesnprintf(buffer, maxlen, "%s%s", branch,target.pos.x != -1? " @ (x,y)" : "");
std::ostringstream dest;if (!skip_branch)dest << branch;if (branches[branch_id].depth != 1){if (!skip_branch)dest << ":";dest << target.p.id.depth;}if (target.p.pos.x != -1 && !skip_coord)dest << " @ (x,y)";else if (target.entrance_only)dest << " (entrance)";return (dest.str());
level_id lid(*br, *depth);
trim_string(s);const std::string ekey("(entrance)");std::string::size_type epos = s.find(ekey);if (!s.empty())targ.entrance_only = epos != std::string::npos;if (targ.entrance_only && !s.empty())s = trimmed_string(s.substr(0, epos) + s.substr(epos + ekey.length()));if (!s.empty())targ.p.id.depth = atoi(s.c_str());if (!targ.p.id.depth && !s.empty() && s[0] == '0'){targ.p.id.depth = 1;targ.entrance_only = true;}return (targ);}static void travel_depth_munge(int munge_method,const std::string &s,travel_target &targ){parse_travel_target(s, targ);level_id lid(targ.p.id);
target = find_up_level();if (target.id.depth > 0 && remember_targ)set_trans_travel_dest(trans_travel_dest, sizeof trans_travel_dest,target);
target.p = find_up_level();if (target.p.id.depth > 0 && remember_targ)trans_travel_dest = get_trans_travel_dest(target);
target = find_down_level();if (target.id.depth > 0 && remember_targ)set_trans_travel_dest(trans_travel_dest, sizeof trans_travel_dest,target);
target.p = find_down_level();if (target.p.id.depth > 0 && remember_targ)trans_travel_dest = get_trans_travel_dest(target);
if (target.id.depth > -1 && remember_targ)set_trans_travel_dest(trans_travel_dest, sizeof trans_travel_dest,target);
if (target.p.id.depth > -1 && remember_targ)trans_travel_dest = get_trans_travel_dest(target);
if (level_id::current() == travel_target.id &&(travel_target.pos.x == -1 ||(travel_target.pos.x == you.x_pos &&travel_target.pos.y == you.y_pos)))
if (level_id::current() == level_target.p.id&& (level_target.p.pos.x == -1 || level_target.p.pos == you.pos()))
if (travel_point_distance[x][y] == 0&& (x != you.x_pos || you.running.y != you.y_pos)&& is_travelsafe_square(x, y, false)&& can_travel_interlevel())
if (!can_travel_interlevel())
// We'll need interlevel travel to get here.travel_target.id = level_id::current();travel_target.pos.x = x;travel_target.pos.y = y;you.running = RMODE_INTERLEVEL;you.running.x = you.running.y = 0;last_stair.depth = -1;// We need the distance of the target from the various stairs around.populate_stair_distances(travel_target);set_trans_travel_dest(trans_travel_dest, sizeof trans_travel_dest,travel_target);
// Start runningyou.running = RMODE_TRAVEL;start_running();
set_trans_travel_dest(dest, sizeof dest, waypoints[i]);// All waypoints will have @ (x,y), remove that.char *at = strchr(dest, '@');if (at)*--at = 0;snprintf(choice, sizeof choice, "(%d) %-8s", i, dest);
dest = get_trans_travel_dest(waypoints[i], false, true);snprintf(choice, sizeof choice, "(%d) %-8s", i, dest.c_str());