This should reduce potential for confusion – compare mon->visible() and mon->invisible(). The uses of actor::visible for messaging are replaced by actor::observable, others by you.can_see(…) or actor::visible_to(&you).
YGFMNCVDR3QEG6JW2ZQFTDKB3RV6T4ROWZAYWG22LJBPNYAE53ZAC
NTHRCKI7DKIQRCYC6I3M6BWDB5SSGDJ64ZM573XCJM7ER632SBSAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
S34LKQDIQJLIWVIPASOJBBZ6ZCXDHP5KPS7TRBZJSCDRVNCLK6UAC
ILO5P5FRDUY4SEQEXMTUDKOPXAUBJRSORHHUVTLLCYOYSXBXOVRAC
CK7CT5TUFUL2AQY7FUHB5JI3FC2KSPWUWHXC6VEUJJ7G4OWUQFTAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
4V4YGPXG45JV5ZPAFDEHTLLGAQIFISMHKCZMMJRAD62FVDCL255AC
AIVXE6QBRVCZAASKQRZO6LBDGTYEYSSD2DZCWRX4VLSKE3GCNIDAC
O3VTFHATCIAAJ4HQF2VJIEXHDZ6RJYJKXJ4ST65WWV26BSGW4YWQC
XRZPPYWPWUOM4SFNI6BHKH2UKJQNLKOV6Y7XIEPEZXE5QYRT26PAC
MQ62OAMLGJVRW2QIL4PAZRAU6PC52ZVGY2FCOBIY6IWGQIHMU5CAC
PKXXBHS3LWLPZI2QVRX22MSQ4R2626IXRSNHFFYHXYTLJJQU54LQC
JN4GPMQCXOY5ICTLPLWP6DXBFULN4GMAEK7T4GXTZVIJAUUKBBYAC
H6VLPIMXKMZVGZVQFUUSW73LRHC3KTIFE3JNSCZ7PJALXP62RIGAC
TQXNC2YQVJZXBPSLDEANMM2EDGHTH4DSN74OJIRMUF7D46SESHZAC
P5TRGRH7XMQSPCZKM5IEEO34TY6WMLGHHX7BU6Y453JFRXLUR2VQC
ODNAIEJW732NG7USKQKCIP4R4DAEYXXJQX6LY7TIN32NKE75454QC
3T2RCRVGVCAMC46C55PQ5VR2RJREH4HQ2OGDQHA5GXHULQWQGG4QC
3PBG6FJ6WGSR4UM3I7UQUYYCSYU3UBCKCIKYKUEEANIK72TUL4XAC
ASXBSZVXJCWVX5VQSRWXL5BWQ4NA7JLYXP6LWQTRGYW6DC2DZZPQC
UL7XFKMUX3WIU4O2LZANK4ECJ654UZPDBFGNXUEYZYOLKBYBCG6AC
#include "AppHdr.h"
#include "actor.h"
#include "player.h"
#include "state.h"
bool actor::observable()
{
return (crawl_state.arena || this == &you || you.can_see(this));
}