controlled teleport.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7105 c06c8d41-db1a-0410-9941-cceddc491573
QTGDLSVMXXROGGKE7JRHRJ7GQIQM3CAB2ETBB4FW6WRDR7VCFO3QC
OV2LVRMR4XFWHWJETUDYSZKN36NV2RFXQ4ZUHVMQMV5WXZKSZQOAC
VMDHEP2MGV6D5MTWNNTUYV4SY45JC3ITDEZLHT4HDJ4N2GXM755AC
2ZZD6EYMSPVCXZTICL4VGYGGQRRWDLZ24KBCDBVIYC54OZ4C6GGAC
XHNJ2W4AQHIF32P2ENIMMDLWAIFWP442KJIZC6RKS4HBJNZIHHBAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
AXQJOPTECRU3ECV3ICDUR6SGBIOIZT5HIOSJ77MRLF5ECGOITMDQC
JJULXW764V5C2HJKZNWQAEWB6QM5YZADD7ZCE35LYTBFEM6PMYCAC
HBJTHYXGSD35S4VVUZOK3UE5M5PEQEDEQTSV3WPJYD25PNPPPSCAC
SWE3F3BLKHYMJEJLXNFH3MR2E6VDEYXJ6DL7QLPP47BJEKEUCAMAC
AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC
HKQTMQVLLOBG2VO47TUGSTQALA3D2YLMEVADXXYNR4RGGKD3F2ZAC
5K2ANIEXD3CPJM4XNKNPZINP2G4NT7SJBKRN62WNBUKJXFERTILQC
M47QBURKKRV2JFK6U7GQNVWK7RUTBVPBJ5FHURC55SKQSXAUFSBAC
NS3KXJXQSN33UQSOBDK3WXXKA3KY5YOUJL67NBZKGQAJYDYZ2COQC
YQDXXS2M7PYVJHY6KAHSRKE5ZRC6T72W7LTGNRVPKCSP5VATWAVAC
WTBI53EKHGSNOQJ7DJVKJNKGW2VFFEDYTQATU53WFH3IAMSSGOZAC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
NDGNTJWFOIU5EYAJU75FRRUICLCVQAJJ65NJ33ZGWDEYZZECPQEAC
R5Q2OJMXNVK5RPXIKLTHHAOP67XOBB44AZKKZ2TOI3USPL6HACXAC
R4HHAP27V6RU7AVHYJ3TVOA6Y4RMWIN24XLGD4O2PE6DEGM3RIHQC
if (object < NUM_REAL_FEATURES && object >= DNGN_MINMOVE
&& is_sanctuary(where) )
bool blocked_movement = false;
if (object < NUM_FEATURES && object >= DNGN_MINMOVE
&& you.duration[DUR_BEHELD])
{
// Colour grids that cannot be reached due to beholders
// dark grey.
for (unsigned int i = 0; i < you.beheld_by.size(); i++)
{
monsters& mon = menv[you.beheld_by[i]];
const int olddist = grid_distance(you.pos(), mon.pos());
const int newdist = grid_distance(where, mon.pos());
if (olddist < newdist)
{
blocked_movement = true;
break;
}
}
}
if (blocked_movement)
{
*colour = DARKGREY | colmask;
}
else if (object < NUM_REAL_FEATURES && object >= DNGN_MINMOVE
&& is_sanctuary(where) )
else if (you.duration[DUR_BEHELD])
{
// If beheld, colour the few grids that can be reached anyway
// lightgrey.
coord_def pos = coord_def(x,y);
if (grd(pos) >= DNGN_MINMOVE && mgrd(pos) == NON_MONSTER)
{
bool blocked_movement = false;
for (unsigned int i = 0; i < you.beheld_by.size(); i++)
{
monsters& mon = menv[you.beheld_by[i]];
const int olddist = grid_distance(you.pos(), mon.pos());
const int newdist = grid_distance(pos, mon.pos());
if (olddist < newdist || !see_grid(env.show, pos, mon.pos()))
{
blocked_movement = true;
break;
}
}
if (!blocked_movement)
tc = LIGHTGREY;
}
}
if (you.duration[DUR_BEHELD])
{
bool blocked_movement = false;
for (unsigned int i = 0; i < you.beheld_by.size(); i++)
{
monsters& mon = menv[you.beheld_by[i]];
const int olddist = grid_distance(you.pos(), mon.pos());
const int newdist = grid_distance(pos, mon.pos());
if (olddist < newdist)
{
mprf("You cannot teleport away from %s!",
mon.name(DESC_NOCAP_THE, true).c_str());
mpr("Choose another destination (press '.' or delete to select).");
more();
if (!wizard_blink && you.duration[DUR_BEHELD])
{
bool blocked_movement = false;
for (unsigned int i = 0; i < you.beheld_by.size(); i++)
{
monsters& mon = menv[you.beheld_by[i]];
const int olddist = grid_distance(you.pos(), mon.pos());
const int newdist = grid_distance(beam.target, mon.pos());