level. Fixes [2472560]. Code cleanups in _handle_monster_move().
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8870 c06c8d41-db1a-0410-9941-cceddc491573
2IPPYYFWEFI342OOKTTEKMLLBUFPERK7RNLBF2TWQF5D47M6PSTAC
YKTMDZB5HVAP2IJGCOJQMIBH6CAD47O62SGRP4XNOAQ55EA3OSJQC
XZTGZ7MOPX7ZOHQ4IQPXOHGUH5WPRNOYAQ6IQOMZDZYNVSAYFTNAC
KMID7RZF737CIGE4TTZPJIXVOL5JSXG6AWXVKGLNPXARNPHJEBCAC
CA6AAWUMXEKXR5VTGK7DHBBLTXDKWP5HUJIKMPZBM7QCYXFZKCHQC
4DVSA4UKEO3B44LGKGQYIIP2YF2A33ACY2TMO7CNGUBML6REPCYAC
AOXEL2V6ICXEIRWXB76LJARWP3NPKG2L4UFYOIQUALUJU4ZLE3UQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
542UIZKI65UDRNEMGFFDBWYD5XC7AYLTZ3JZQRR2GHYJALD3YY6QC
PKENI7REL6MQ5KKGSBIOVMPJKITY6OLQRXHVD4Z6PU7HMS23XM7AC
PKXXBHS3LWLPZI2QVRX22MSQ4R2626IXRSNHFFYHXYTLJJQU54LQC
SPWOUV6ZNHLBSAX455ACJDBEJYVFHGO4H76L4NPAE5DF6BEAK34QC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
SIPZWJMMXWK3H2DOA337HXWDFKKNBKMQ7W2YIVDZKPZGZMBTYHVAC
P5TRGRH7XMQSPCZKM5IEEO34TY6WMLGHHX7BU6Y453JFRXLUR2VQC
NCRXRQNCAMQQOZCL7TBMKGM6TOGDAHR3GRXAVVB26FLGE2KUZC2QC
OCAXB5FMLNTM6ZOSWRFWBMRFFXHTLSJXHXR2AT6Q6MZN5RX5V2QAC
OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
T2AYVN57EFJQLFUFLAZDXKDAFDGTDLQIEQWQZNYFWJZBYSTYH4QQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
IPQ63XIUPHFMCQOZZAVSGCJOZFDRDWZTUUJSAUMARNDUFLBEMYIAC
MIMW5CBZXQEGL6BFKK2LK322VRSBADFF7AXMC24F3OBCDUYKQTGQC
NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC
PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC
YTIPWYSKK63WIUKVYLCD2WQUYIBW4R57653MOCJWIKNIFCNHA2DQC
ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
LOEVXFCKSHE3TCQSUSHOIHHVDJT3RFLE6U3VDI6JXAQTQI5KCJ4AC
UTGQ25S6K4R2POPYLVF6A5ZU4PRTN3SIR4DL672HERNAE3RZP7AAC
LTX72QGIPNUGWQN5ULPOMFCOPZTK7472DQY4AYX5WM3WHSUVXI5QC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
5KJCHLIUFKRPMIVWUAYT6EOF7SW4PTQF6Y5OPEFWXGLE7DUGYLZAC
XJBNF2N35THJC2KYGCMPLC3CDCJP25CEDKHUI3P55V6H5YWXBUKAC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
5HGMULU7IWTFJJH35S6XTCW3YZEMCORXHQL6NVY2TO4DUMVITNJAC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
KNW37MRIU72X4LPXSA4AUPW3VJMOXKWY2XFTV67KW2ZXTCSYMMNAC
FUEEIUKGHHFPIRZCN3N753GONWAZTWQ2ZWR53IBJAAZ6FZUNGOMAC
for (int yi = -1; yi <= 1; ++yi)
for (int xi = -1; xi <= 1; ++xi)
{
coord_def c = monster->pos() + coord_def(xi, yi);
if (in_bounds(c) && monster->can_pass_through(c)
&& one_chance_in(++pfound))
{
mmov.x = xi;
mmov.y = yi;
}
}
if (x_chance_in_y(2, 2 + pfound))
mmov.reset();
// Bounds check: don't let confused monsters try to run
// off the grid.
const coord_def s = monster->pos() + mmov;
if (!in_bounds_x(s.x))
mmov.x = 0;
if (!in_bounds_y(s.y))
mmov.y = 0;
for (adjacent_iterator ai(monster->pos(), false); ai; ++ai)
if (monster->can_pass_through(*ai))
if (one_chance_in(++pfound))
mmov = *ai - monster->pos();
if (!monster->can_pass_through(monster->pos() + mmov))
mmov.reset();
int enemy = mgrd(monster->pos() + mmov);
if (enemy != NON_MONSTER
&& !is_sanctuary(monster->pos())
&& !mmov.origin())
// OK, mmov determined.
const coord_def newcell = mmov + monster->pos();
monsters* enemy = monster_at(newcell);
if (enemy
&& newcell != monster->pos()
&& !is_sanctuary(monster->pos()))
int targmon = mgrd(monster->pos() + mmov);
if (targmon != NON_MONSTER
&& targmon != i
&& !mons_aligned(i, targmon))
monsters* targ = monster_at(monster->pos() + mmov);
if (targ
&& targ != monster
&& !mons_aligned(monster->mindex(), targ->mindex()))
}
if (attacked)
{
{
monster_attack( monster_index(monster) );
return (true);
}
// XXX Is this necessary? Isn't it handled by the next case?
if (f == monster->pos())
// last updated: 08jun2000 {dlb}
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
bool monster_attack(int monster_attacking, bool allow_unarmed = true);
// last updated: 08jun2000 {dlb}
/* ***********************************************************************
* called from: monstuff
* *********************************************************************** */
bool monsters_fight(int monster_attacking, int monster_attacked,
bool monster_attack(monsters* attacker, bool allow_unarmed = true);
bool monsters_fight(monsters* attacker, monsters* attacked,