E3OI7XFKECKFLJT3KMTGCUDNXEJGS5I6DDV6X3VJPU2R53YSPLXQC ORQ25OHUR4IWKFAOKMQGILMQWWFXTWBMI4CVXGKUG54CZXNKGL6AC H6BKDO7FWEURT2BOJWZ55GKJMZ6MFJP5BCDVZVZJUJAUNYDXQOPAC TQXNC2YQVJZXBPSLDEANMM2EDGHTH4DSN74OJIRMUF7D46SESHZAC HS4YFXH6CMLDAPF5BMFOTHYY4K3LLW4WIWBDR7IEVJC3WHJYSYFAC LOAPDCDZDTOXBCNX7IQBCACP7TCMVUBNZVUTUCLX5VXM7MEFPQBQC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC LFBNFE3PZBXTR2ROPKYPARUWLJAYWAKGTS7VBWADZWVVSJ5CLX6AC 2E4RV454MTTCKYLKMSHEEAFPNAFVUXXPBZV3XP6V7QMF4BBWE7TAC TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC 4CHQ6JHHITQSW4FJPGP3LFHIZUXLUMMUGH4TRUNN4FU2PXLNVQFQC HH3HFWVXABJ4IRMN22PPJCREMULZSN6DA7VYKOGECGMNUQTZ5QNQC KO7TLN7OM7UQF33RRTOFPFTDQLTYCOE4N7KWQUTWRIUSEB6PQ4WQC WVKP2MFDE56ZO3OI7FCEKE5LI3MAUIL6IDTUW6MEBCV5OWF4OKEAC YKVVFNKT2M5WG2KBURRTOJG23BJVI6WUBP5JOGYPHQBS4RNGFGWQC SXUKGEXMGRRN6UO2GJW4HSVU5TSUNUHIHBMMF7CAG7QMLKZYWTKQC TMN6MGCYNMQL3GG5P3JKKT4ROF2RB26H4AE6LHNEE76MBRVCDZMQC BUSA7O6EFBZVAG2RL5T7MD2WTWKOEKKIAAZ2VS4Y3L6ECT4HQR6QC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC RCPQNIRPR3NQXEMVLBAQW6657UJFIP43N54UJVEZHJH22OH4UQIQC I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC Z6Q7JVMFQ32SC7FRGOB7CE7JS2HEOPAO3B2VLU3YR3UCUDZFIPFQC }bool mon_can_see_monster(const monsters *mon, const monsters *targ){if (!mon->mon_see_cell(targ->pos()))return (false);return (mons_monster_visible(mon, targ));}// This does NOT do line of sight! It checks the targ's visibility// with respect to mon's perception, but doesn't do walls or range.bool mons_monster_visible(const monsters *mon, const monsters *targ){if (targ->has_ench(ENCH_SUBMERGED)|| targ->invisible() && !mon->can_see_invisible()){return (false);}return (true);
if (this == looker)return (true);if (looker->atype() == ACT_PLAYER)return player_monster_visible(this);else{const monsters* mon = dynamic_cast<const monsters*>(looker);return mons_monster_visible(mon, this);}
bool vis = !invisible() || looker->can_see_invisible();return (vis && (this == looker || !has_ench(ENCH_SUBMERGED)));