out into the open.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7758 c06c8d41-db1a-0410-9941-cceddc491573
BY6T2KQBNMPI54QVEI4QRI6GOCMKAPDEY543VTX7PWXFNNQF25MQC
37NLMXYLDTNPWXKWZ4F3TBMNA7CKL5L6TSUJMA2JY26TCJUUE54AC
43JVVA7TDO34AZTBX4Y6VLCNRP2BHC4OAUGYNWLVYGUIL6HGESPQC
JYEEOUYQ7ZPKOGWUV7VCORBVSOLF2UCBFBH3TR75RGOSS6PNKYUAC
BR42OZ3CHR5F5MKPBUOPRG3EXIEQRRRWD5L54BTZQRDXV6VBLATQC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
WFG3MHLJUHQEHV65SPAIOI74NIZTGM447T4WKWKF7CMUIUNRUQOAC
3DQXSE4YGFBBDUWK4YEOFWW4UPWILWELFSLP37SL6BERGAZJC5YAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
IA6EPF5ZQE6276Q4JSUKBSXHX5ODRY5I5UK7LXH4MQEDG36P6PZAC
L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
// Reproduced here is some semi-legacy code that makes monsters
// move somewhat randomly along oblique paths. It is an exceedingly
// good idea, given crawl's unique line of sight properties.
//
// Added a check so that oblique movement paths aren't used when
// close to the target square. -- bwr
// Reproduced here is some semi-legacy code that makes monsters
// move somewhat randomly along oblique paths. It is an exceedingly
// good idea, given crawl's unique line of sight properties.
//
// Added a check so that oblique movement paths aren't used when
// close to the target square. -- bwr
if (mons_wall_shielded(monster))
{
if (mmov.x != 0 && mmov.y != 0)
{
bool updown = false;
bool leftright = false;
coord_def t = monster->pos() + coord_def(mmov.x, 0);
if (in_bounds(t) && grid_is_rock(grd(t)) && !grid_is_permarock(grd(t)))
updown = true;
t = monster->pos() + coord_def(0, mmov.y);
if (in_bounds(t) && grid_is_rock(grd(t)) && !grid_is_permarock(grd(t)))
leftright = true;
if (updown && (!leftright || coinflip()))
mmov.y = 0;
else if (leftright)
mmov.x = 0;
}
else if (mmov.x == 0 && monster->target.x == monster->pos().x)
{
bool left = false;
bool right = false;
coord_def t = monster->pos() + coord_def(-1, mmov.y);
if (in_bounds(t) && grid_is_rock(grd(t)) && !grid_is_permarock(grd(t)))
left = true;
t = monster->pos() + coord_def(1, mmov.y);
if (in_bounds(t) && grid_is_rock(grd(t)) && !grid_is_permarock(grd(t)))
right = true;
if (left && (!right || coinflip()))
mmov.x = -1;
else if (right)
mmov.x = 1;
}
else if (mmov.y == 0 && monster->target.y == monster->pos().y)
{
bool up = false;
bool down = false;
coord_def t = monster->pos() + coord_def(mmov.x, -1);
if (in_bounds(t) && grid_is_rock(grd(t)) && !grid_is_permarock(grd(t)))
up = true;
t = monster->pos() + coord_def(mmov.x, 1);
if (in_bounds(t) && grid_is_rock(grd(t)) && !grid_is_permarock(grd(t)))
down = true;
if (up && (!down || coinflip()))
mmov.y = -1;
else if (down)
mmov.y = 1;
}
}