of monster_at(). The hope is to eventually remove mgrd completely (in favour of scanning through the monster list, or a different datastructure which gets updated automatically when monsters move), and thus fix all the mgrd-out-of-sync bugs in one fell swoop.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9056 c06c8d41-db1a-0410-9941-cceddc491573
HB27XKFYVYIEQZGBCEZ6LKPUBMXLIPDAAS636GJ5TULIQ7KND5KQC
UJMQZDP3ZBWXZICQ47JRNNR73BUP4OGLOKW66INUFPBFDBL7YSPQC
5CFLY5V4D5ZQRZD6WPTXPOSEEJFGSIBUPX72Y7IEO3KW2443ABEAC
2WWSPLCXLSMBGTXUC33EQ5YBOA5IBFSMJSTZ2TU6HZIMZZWZJWGAC
K2RH5RUM432AQDEHB6ZVKFIVU7FAH5E2BZDHW2MMLNFR2C4YMFJAC
6GCY45KA5LDI722CIIRZDCIQ35QCVVLBTUTDSLYYIXNXPQ7EJZTAC
IFXW7O7VETG6JSWUGSLH5WBVR5VMY4OQ6XEYAWR5HTNW7SQ6E6PAC
BHUCNDTJVIRHZZVPVWV53XDMHM6KRSELWDPA4YKUYNOVCLH6GRJAC
JAAPVHJ3BBGLMIP42TMLO7G24J23SNAPP6YAFRPTRIEBOOXVRRMQC
EL2CQXDF4W3ZMIKFPSZGCQJKN4UPM7LXL7GXYFZBBHV3GEKG5VEQC
CZWERNJVMJFBGKQHHR6I5U2FCRUJD7H2DG3C43V2CBAW74GYU2HAC
XKSYV5QUG2PET6BNBZPNI4D7LDBJGWOH335OD3J24AKJWE63J3WQC
KTHZLXQCGPBBO4FIKMXCORB3HTY3F64BA5MIEZE22S4O5IQZRIWQC
JBZ7NU4BB5PGQWCOSZHD5OQUHQIVOD4XGJLSJQ7BUGQEGPRTVGZQC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC
5HF63O5IRRERI2V3SZEDHUNFHUF2B4RSVWQR6C6DR5JF5UYSROWAC
NK2TBKWOQBD2ZRGAO4Z3HMZPIN7UX3HNUS2YHEIJUUINUTRMPODQC
HQTS3VQ6PNUZKHNVEWMML7JNAAAKL4DSW3KFSRCCSLGYTDHZFCCAC
Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC
TOOHYAX73C5KPSWGHPCBWCUN62WMMO3BI5CWEEMGV3WBFZ5RIH5AC
OMSSJON5IE4LBXJ7CZE52IZRZS7ZICS23SKP4AGLHH3QNCRMEFVAC
QDWDUURSNLMT6AXNNJ3DEQCWAKCAIHV6MP5F7QGIBGXOG2BI2NPQC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
HAI4YDKI72OBDT5KMMVCO3DOU765OPWCU7GTRKTALFNSDOI4R2LAC
U6UUTZZVZHQVN3HWPN2CLRNE4VXESLNHS75W4CYUZIAKVHCYRCDQC
LUH6GAJODIQXNPBEHMSUTKH3KA3DYVRCKZ6GJJ4HHNHOIMMUEP6QC
CUB27EJDQG66FF2YCKOV4HU3LAJVJIHUJ5QYLURRDIEVGPK666DQC
KATZLWENEIQMKKWIV4ZLXJ5HFUW6SU5K4ZU6NENBOL4XAAVTDUKAC
NULVQ2A7ES5N3BBQAH6YKFST6UPVKD4KYYFFHYTUKSYLHXR4OYSAC
PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC
UEI5JAVCMN7Y2SACTEZPZSNFJWOJTC55G24Q6LKQCT4XNDH5ZQIAC
QFHQNEJ7B5RNTY4QRCDWBD2GVHUVN2URKFSZ2VCL4HKYB62ECIBQC
7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC
BLN5LDH5NRRJPBY77A36Q4THEY75N42MVCJMZRUZ2D5YSXTDL4HQC
C5VA63WAQRWPENIMXRPUPZLZJMC77PL2B3A77HYFWDCZU5QDG7VQC
EQNPQNYN6JCLT47M3ETBMMV5JOB26TQY6NY2ZNPPBTQDO7XTWD4AC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
RCPQNIRPR3NQXEMVLBAQW6657UJFIP43N54UJVEZHJH22OH4UQIQC
LFIEDWOSNPS5D6EUWPUPOBBN5CEHVF2MLNOSPXEIVMRZ77A5BH4AC
B62ICMDTN5V7R7RBL4JALFVKEMVOOVLRSJASRNYS6CGFWBEEF5JQC
IXOB6KSQY3CWTXS3LLNDWLVMNK6CV2MCXJAR5CJLNNX4ZOLAMV6QC
RSIUBEQUGNU4LO6KH4PKVROWQS33DAKSY4XFVGN7T3CEKSXABCSAC
RDZUMV3A5TREQHLPPJWDWVXBNIOWC3CQJJ35TYFBQQVQNTU7SPXQC
BRGAZR5AXWC2IALBVXO5SB354IRQEIRHSK55RZPGFI4AGIOD4LUQC
MT73EUNHNCLN5AQW6TT2PSM26PJCFQL5SF53NUYQ2T27UHATQNUAC
WSUGPG4GWKAV3DINPD5LYP6W3GNFKIFWR3UXQGOQFSLIG5PLOEMAC
5HGMULU7IWTFJJH35S6XTCW3YZEMCORXHQL6NVY2TO4DUMVITNJAC
ZI7643NG3LOKVSDXHFNV2YU3ZIQUVEY25AOXZCPBXJB5SQAUCE6QC
X6PDJWFXOZ4NUKXNOEP54CYQ6PCQJQK2KALAYY75XDAFCJJYWE6AC
PF6QKUU7AKP3X7NBR34O73PQ4BS2MWBMPD5MH5HOV2HLQFMA3PZQC
WSW74U3IOZ4Q47MHN57KCWZCSJ4U4MOJX4CCDOLUD2KOFEIQR4BQC
ZJ35GZK55U4IYTYDAVXTAMBNG5YF3LIGYD7OVTQH3UFA56I7JE5AC
RDLF4VIJMMHHL2OCQEXOK6HNCS5QX3FZF3S4IHPY3OZUKC2FZ24AC
U2AV5FJ7UR6QMGMSZBW6MMLBZHWTANK46QOBP42PYHMAXJCBMRBQC
2NFFQ4TCADDVDWUNH3YXIPLDQ566TPF5WZ2YAZLDM5UEWPVUKNZQC
IGNQ3YSGMW6NG7GPYYXWXW6XPM4YWKNUJ5IU55QCWZ2AEHHO3L3QC
7O3C7BZXXFHJQQMLE636R26QJPETYRADNLVJWQDJYGWLQFEG2ISAC
BWHU47MJ7KAVKMKMRBVYLOHUCASSNVCGPC3SPMNBAC7DLI6XX2YQC
475LL4U4ND6PTNV4XKC7WQAOJC7RF2VCCVX3DRILP2PKIBFYWE6QC
7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC
WZTIVJJVK7CAHU5D2IYPH7TWGTLBBYPJZJYPGWKCDGM3JQ6Z6VKAC
D54BYIF6H4WYWDUFPAEPH3HFZLRFCWSATJ2JBS3I4S2JYKZFB34QC
IQFLSXLOKMSMM65BL7XOEI5ZP55WKZ7BFBOIA44AMTPNJ7DAQXBQC
2G7MZ653N3JUHJ4DA5Q7VRO3S5T27DLPKDCJEKB6DGYSTXULUVWAC
35KOQQV4ZBNNIAXGKPOYHOWTN7RBQY7HRZTVMR3WAS4GOYFBM6PQC
33NP4VXH6MMMH4JFK73G4ENZ2VYFKW2AWXIRITZLVIENKDOSJO2AC
IGKVCDUXGUOCEDVHXKOXNVMN3I3SFBRXG2G3WPKZBVL7USXSC47QC
FU7EQZLXD7YNGUUDHXCBI3VUKL6M2G3EPDY6FB5UA6B6RD4S5UOQC
NPTVMSNYWIALN2GSKESU6NKX7XNG7QDH2TNIWUB6R6NHCLK32NFAC
5XNQ3SSNBFXFNWA6DPM74W6FH65NX665P3DMH6YCWVFOPZTJSYCQC
SW3RLYFNRT3IJBK6LYKHKP2J2YDU7SXQWAJZX7U6S7ICYW43OMNQC
RQFQSU37Y3ZBFR634JWYHE77LIOOINGBRNL4KUHPPRA3ZR6W5QIAC
5FHWTG7M6FW4B3I33YI7QSM3OZIB6ZGC6TI6JISSLY5Y43HI56VAC
P4KV3XKK2NCQAUPCMTHJPSA2FETTBY5WOMCVP4IFMNJZABEQWKWQC
DKRSOHZXL6EPSLKOKHF7GJXSZEJVY7CXGACSHWLM5B5FTRETWWCAC
TPPJRQ2NTCV3GI2VRHEXQJREDERPJODCJWUG5WCOQGN4REPPPAMAC
WP5VP57D5BWKDAS7AA224OV2RX4O4BPTI2BLY7TS3T2O2PLUGXCQC
32S5UVZCXZ5QWH4NDB23MHOPLVPON3VKIWH6EEY42SRPBFZUUXSQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
TZ643KHSE5CUPXFSQ7VYVOCM5MTQ7F4SENEYQX2RNFHGHLQVS3RQC
IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC
SKWBAGSAB625IIN4UP3NCPRX2H3KCPC2LULHS2A7JVRLO3EUBJDAC
TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC
JN4GPMQCXOY5ICTLPLWP6DXBFULN4GMAEK7T4GXTZVIJAUUKBBYAC
ABLV37FMURRJPEZV2VRKOUYAKEMLI7E6RA4PDAII2EJ5L7WBHKZQC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
FEKRY3DYIDLWVBLAZN7W2WFNEKZPCAHABXOSM6K5RLTH5WY2NODQC
BNTPYSO6ECZ76CHHLDP3ASSPDSEUH4Y3E3LETKNXVWAWJRFL3YEQC
PVLLIAYFIAU4TQFBIP7B4ARIBUX2CVTSBQECEU6VTONJV4ANHVFAC
347OTVM5V6C5UE5ERARQJQTVNTHKQNL5NEKE43TI2SYUH64CWT6QC
47NSOFQMBZCDIBHEAZSENFUGDSQCX3GJHFBUZ65ARDKCYIZ435LAC
O7S3ILRELHICJXXTDGMF7KPPZWYHPYCNDPV2I77FZXXH4I454B4QC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC
Y4NA3JSN63RLATF4NNBPSR5CWF5Z7UEMWCGVX4B6NOAR47CGM4GQC
Y5RFQ6KNJCBQUSV2T6WDR7TPZLZYLOAWBVMUTHDXGOZQDZ2U423AC
3DQXSE4YGFBBDUWK4YEOFWW4UPWILWELFSLP37SL6BERGAZJC5YAC
PEZFWKRHDHV4UJTPK5XJZ3CGTZ3LPTDYSPTYBENLQ7VRSP7YFSIQC
HM6NOS7BN5665KWIFGBXOHZIDMRSVCESN72GMGI6NVBFZGCF3L6QC
JMSKD53OB2M34RFVJASMIODY673MVZHPPJYQDT6F4KV7MYQYZWNQC
RZP5Z6JM74GVX2M6L2JOFRJ5VT2XGFHBNRDESVHSKF66PQKIW32QC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
OXHOOJE4XEQKGI3JKURNSITG6CRQFAOFQ2EKKG6M5DCLN7LS4GUAC
ECUYJLVGW6ADRLLF2WOMRG464VHOVDPP5OK5SAX2PHBUUC5FD4TQC
CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
4PBRMB7TK2TXL7VSDKMUQMT4QFK3SGRU4TUVMEM7V2VS7KKKILAQC
MSRJ3N4NX255RVISUOPTTTY2GG4JVVNNM76HWUZ2EKCYESNI6MLQC
CRX4RG35C3DH57NIXCW4CG4X7SBMSX7TAJR2BAFQ4LQKCLYUNANQC
YFIVTYI7PMVAXV23DUPXPAQNEY3YSFIXQGSN32I3WVHMMD5XS5DQC
ESWIM76FGJL4QFLSHU6AC4D74PT7OPLQ7ZCJYWLZS5UCBAJDXYHAC
GL7TJGUGV4JPLZCDWH6QVST4RYW7UJV6IP7UAEWEKNBWJO2H2ZHAC
ERTQJ5ZXDBRGKC5N3GZ6U4MFFK5HB6737FVLVD4GSMGTIFCSJJJQC
23PFLB2E4QHL5SF3Q2YV5FXRH6MFHENEU2ACVC572ZCYDXCBZVQAC
G4TVXOLIF5X2MWV7I4UPT3MSQHRMGME6QRIIFAQ64C45JGYK7SIAC
TO43FWKHNIA5MVDOFXYHQODTLBQYEZKX5UIUGID57436UF7G2EXQC
MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC
EYHC4V76YSCWY22DQIXLVTAP5SKZLBSBQWYFPDVEXF6IW552HR5QC
DH3YTI6VVI727SQXO4CXSDCSBG2UN3UAWLFULBGRLBVH22ACRXIAC
4FQAKUKUO6PCAZ3N4HUR5XL6E4VA5UQUZ3AEDGRBLVY7W2LMWI7QC
BMGB25AWEDOAWKDB7H22R6D4SL32CSBSOBWBIEN3GFGDLEDGEWJAC
UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC
AJHVP42Y67SB4NKFMZB24524PGX2XA5WLFNEFV52MIGTS47ALMVQC
GR6QXMDUVPNXA2XVDRJUWGVSDI2FXQCKLXAXZUVEI6NYRMK6I5LQC
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
FLAGBNUNSIQNFDN53CDWABJRTTFWDL4PG34AI474ZKPXDEPYHOAQC
W74555HMPXUQ72AGKBXC5P3STMMX5DZAW6ZESUDLNVJBCAG43PLAC
CDFS7Z74W5HKPQIHQICOG442KQFXUSBGGLDDQLE3MG74T44YU6AQC
OSRZEPPGBIMSZBWIVBTZTTIMV6TEUGVZRZ5AI2ZJW7CVZZQBUIMQC
4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC
JEWGBHOQGDSWMLT4FZTQWUKTBJJWY5CSRAQQUOWIZ7U4QBJ6ZLBQC
AMBBZGB4EP4MA2ILKQSAY4O2XQAIH673JHCDQ6N4MBGL2MAZGXNAC
7VRY3OH6WA7QLMNNOX76RR7C6HA7CLNYLZLWPXJWAP75QRF5B27AC
QR6YCIDD2Z6XGJM6CIWIOWT7WG3TS2RJ6UGCEPZD3J3QISG5BURAC
PKHOZG6TIUP2NZZIP6CW5OIPZ3O6PCGWXXW5MH4I6P2WVM24HZEQC
CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC
NCRXRQNCAMQQOZCL7TBMKGM6TOGDAHR3GRXAVVB26FLGE2KUZC2QC
7VCVH6XKT4L4PSCBF6XRYV3WQQDVGDMA73RHPV6IOWMQ2S7B5XAQC
EDGP3KBYHBZ62J6RSGWDMWG4AARB2D3ULKELML5H3S4EDWTWUD7QC
P5TRGRH7XMQSPCZKM5IEEO34TY6WMLGHHX7BU6Y453JFRXLUR2VQC
F2ZJ55CL3T66DFM34BQWCJNHIT4XJFCGTWTA5KESV6NHWFLTGUYAC
YF2GZWXNV6NVFFEBEOYS67JQJQK2IUS5BZMGJW3XQPYIJYHQJCEQC
AVSWNOP23Z2QCLQGXFDZV7TI4RC3XSXHIX2HDXFHXGKDEZSSIGJQC
KBNY5FWKTEAKABFCLPC3QFKFSVZKAGXINPCIFV6WDSWFO4VCKNTAC
7EI4HMXZ7TAWZKFZG2SXHDAX3FWFBCZLUAKOALPRFF72FS7NKVBQC
SLDR32H45VDN74AVZ2JDPLNK7AZWXDS2YRTLMGK7E3FYW6OWOFJAC
if (mgrd(gc) != NON_MONSTER)
{
tiles.add_text_tag(TAG_TUTORIAL, menv[mgrd(gc)].name(DESC_CAP_A),
gc);
}
if (const monsters *m = monster_at(gc))
tiles.add_text_tag(TAG_TUTORIAL, m->name(DESC_CAP_A), gc);
return 0;
if (mon.has_ench(ENCH_SLEEP_WARY) && !one_chance_in(3))
return 0;
return (0);
if (monster->has_ench(ENCH_SLEEP_WARY) && !one_chance_in(3))
return (0);
const int which_mons = mgrd(where);
if (which_mons == NON_MONSTER)
monsters *monster = monster_at(where);
if (monster == NULL)
int monster_attacked = mgrd(where);
if (monster_attacked == NON_MONSTER)
return 0;
monsters *defender = &menv[monster_attacked];
monsters *defender = monster_at(where);
if (defender == NULL)
return (0);
int mon = mgrd(where);
if (mon == NON_MONSTER
|| mons_intel(&menv[mon]) < I_NORMAL
|| mons_holiness(&menv[mon]) != MH_NATURAL
|| mons_res_poison(&menv[mon]) > 0)
monsters *monster = monster_at(where);
if (monster == NULL
|| mons_intel(monster) < I_NORMAL
|| mons_holiness(monster) != MH_NATURAL
|| mons_res_poison(monster) > 0)
if (mon == NON_MONSTER)
return 0;
if (mons_holiness(&menv[mon]) != MH_NATURAL)
return 0;
if (mons_holiness(monster) != MH_NATURAL)
return (0);
menv[mon].attitude = ATT_FRIENDLY;
mprf("%s sways back and forth.", menv[mon].name(DESC_CAP_THE).c_str());
monster->attitude = ATT_FRIENDLY;
mprf("%s sways back and forth.", monster->name(DESC_CAP_THE).c_str());
const int mon = mgrd(where);
if (!invalid_monster_index(mon))
menv[mon].del_ench(ENCH_HELD, true);
if (monsters *monster = monster_at(where))
monster->del_ench(ENCH_HELD, true);
if (grid_is_solid(grd(spelld.target)) ||
mgrd(spelld.target) != NON_MONSTER ||
(cloud != EMPTY_CLOUD && env.cloud[cloud].type != CLOUD_FIRE))
if (grid_is_solid(grd(spelld.target))
|| monster_at(spelld.target)
|| (cloud != EMPTY_CLOUD && env.cloud[cloud].type != CLOUD_FIRE))
for ( int ux = p.x-1; ux <= p.x+1; ++ux )
{
for ( int uy = p.y-1; uy <= p.y+1; ++uy )
{
if ( ux == p.x && uy == p.y )
continue;
for (adjacent_iterator ai(p); ai; ++ai)
if (grd(*ai) == DNGN_FLOOR && monster_at(*ai) == NULL)
if (one_chance_in(++num_ok))
result = *ai;
int mid = mgrd(beam.target);
if (mid != NON_MONSTER)
{
monsters *mon = &menv[mgrd(beam.target)];
if (mons_is_mimic( mon->type ))
mimic_alert(mon);
}
// Monster might have died or gone away.
if (monsters* m = monster_at(beam.target))
if (mons_is_mimic(m->type))
mimic_alert(m);
mid = mgrd(moves.target);
if (mid != NON_MONSTER)
you.prev_targ = mid;
if (const monsters* m = monster_at(moves.target))
you.prev_targ = m->mindex();
case ATT_FRIENDLY:
m.attitude = ATT_GOOD_NEUTRAL;
m.flags &= ~MF_CREATED_FRIENDLY;
m.flags |= MF_WAS_NEUTRAL;
break;
case ATT_GOOD_NEUTRAL:
m.attitude = ATT_NEUTRAL;
break;
case ATT_NEUTRAL:
m.attitude = ATT_HOSTILE;
m.flags &= ~MF_WAS_NEUTRAL;
break;
case ATT_HOSTILE:
m.attitude = ATT_FRIENDLY;
m.flags |= MF_CREATED_FRIENDLY;
break;
default:
break;
case ATT_FRIENDLY:
m->attitude = ATT_GOOD_NEUTRAL;
m->flags &= ~MF_CREATED_FRIENDLY;
m->flags |= MF_WAS_NEUTRAL;
break;
case ATT_GOOD_NEUTRAL:
m->attitude = ATT_NEUTRAL;
break;
case ATT_NEUTRAL:
m->attitude = ATT_HOSTILE;
m->flags &= ~MF_WAS_NEUTRAL;
break;
case ATT_HOSTILE:
m->attitude = ATT_FRIENDLY;
m->flags |= MF_CREATED_FRIENDLY;
break;
mid = mgrd(moves.target);
if (mid == NON_MONSTER) // can put in terrain description here
break;
debug_make_monster_shout(&menv[mid]);
if (monsters* m = monster_at(moves.target))
debug_make_monster_shout(m);
mid = mgrd(moves.target);
if (mid == NON_MONSTER) // can put in terrain description here
break;
wizard_give_monster_item(&menv[mid]);
if (monsters* m = monster_at(moves.target))
wizard_give_monster_item(m);
mid = mgrd(moves.target);
if (mid == NON_MONSTER && you.pos() != moves.target)
break;
debug_miscast(mid);
if (you.pos() == moves.target)
debug_miscast(NON_MONSTER);
if (monsters* m = monster_at(moves.target))
debug_miscast(m->mindex());
const int mons = mgrd(where);
if (mons != NON_MONSTER
&& player_monster_visible( &(menv[mons]) )
&& mons_is_mimic(menv[mons].type)
&& !(menv[mons].flags & MF_KNOWN_MIMIC))
const monsters* m = monster_at(where);
if (m
&& player_monster_visible(m)
&& mons_is_mimic(m->type)
&& !(m->flags & MF_KNOWN_MIMIC))
// last updated 12 Jun 2008 {jpeg}
/* ***********************************************************************
* called from: directn
* *********************************************************************** */
void describe_feature_wide(int x, int y);
void describe_feature_wide(const coord_def& pos);
if (!mon.drain_exp(&you, false, pow / 50))
simple_monster_message(&mon, " is unaffected.");
if (mon->drain_exp(&you, false, pow / 50))
simple_monster_message(mon, " is unaffected.");
std::string prompt = "Do you want to try to take the net off ";
prompt += (&menv[mon])->name(DESC_NOCAP_THE);
prompt += '?';
const std::string prompt =
make_stringf("Do you want to try to take the net off %s?",
mon->name(DESC_NOCAP_THE).c_str());
const bool can_swap_places = targ_monst != NON_MONSTER
&& !mons_is_stationary(&menv[targ_monst])
&& (mons_wont_attack(&menv[targ_monst])
const bool can_swap_places = targ_monst
&& !mons_is_stationary(targ_monst)
&& (mons_wont_attack(targ_monst)