the array match up with the enums.
Don't describe the weapon with which an unseen monster is attacking.
Added methods can_see() and visible_to() to the actor, player and monster classes, which take care of calling mons_player_visible(), player_monster_visible(), mons_monster_visible() and mons_near().
Re-arranged the first 12 dungeon_feature_type enumerations so that similar features are contiguous (i.e., closed door and secret door are next to each other), and added DNGN_MAXOPAQUE (one less than DNGN_MINSEE), DNGN_MINWALL and DNGN_MAXWALL.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2293 c06c8d41-db1a-0410-9941-cceddc491573
Z6Q7JVMFQ32SC7FRGOB7CE7JS2HEOPAO3B2VLU3YR3UCUDZFIPFQC AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC RCPQNIRPR3NQXEMVLBAQW6657UJFIP43N54UJVEZHJH22OH4UQIQC 6GT5JAWOIIL4SQ5MWIID6ZVO3KKQFWDQDZNVFHZ6DNK5QCBXJ4UAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC VVEULZ7FMS53F6WZUJLNJ23URJMCCWHBUEDVGKI6R72JO2DLL5HQC ACKNLTFL2RI3PMRWLNRVLRWGQAMLRFKNGNS5LED6NFE5GVGFIHFAC IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC AFE345BJ7IX2YYYX3I5I6RYLXNWJCFE4WMH6F5JMIR6X7WUP75CAC QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC GNJGG33CNP6IWUW4V2JKIFAC5N43TP5MX4PZOTXROBYZVXQEAJLAC HH3HFWVXABJ4IRMN22PPJCREMULZSN6DA7VYKOGECGMNUQTZ5QNQC CEK6M777MI5JVDC3KHE3JD3FETVSJ4VN6DGATBI5P3O6P5XHY4DAC UH3CJQMQ3NPICXD34NTCTUZJWOCEF4P5XEGXFLLNDDFLZK7QPUBQC E7DV36ZR6TOGBD75BHGARCMIQQS6MSV7V3A7M7V4LOFHEC5NF6CQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC return (grid == DNGN_ROCK_WALL|| grid == DNGN_STONE_WALL|| grid == DNGN_METAL_WALL|| grid == DNGN_GREEN_CRYSTAL_WALL|| grid == DNGN_WAX_WALL|| grid == DNGN_PERMAROCK_WALL|| grid == DNGN_CLEAR_ROCK_WALL|| grid == DNGN_CLEAR_STONE_WALL|| grid == DNGN_CLEAR_PERMAROCK_WALL);
return (grid >= DNGN_MINWALL && grid <= DNGN_MAXWALL);
}bool player::visible_to(actor *looker){if (this == looker)return (!invisible() || can_see_invisible());monsters* mon = dynamic_cast<monsters*>(looker);return mons_player_visible(mon);}bool player::can_see(actor *target){if (this == target)return visible_to(target);monsters* mon = dynamic_cast<monsters*>(target);return (mons_near(mon) && target->visible_to(this));
bool monsters::visible_to(actor *looker){if (this == looker)return (!invisible() || can_see_invisible());if (looker->atype() == ACT_PLAYER)return player_monster_visible(this);else{monsters* mon = dynamic_cast<monsters*>(looker);return mons_monster_visible(mon, this);}}bool monsters::can_see(actor *target){if (this == target)return visible_to(target);if (!target->visible_to(this))return false;if (target->atype() == ACT_PLAYER)return mons_near(this);monsters* mon = dynamic_cast<monsters*>(target);int tx = mon->x;int ty = mon->y;if (distance(x, y, tx, ty) > LOS_RADIUS)return false;// Ignoring clouds for now.return (num_feats_between(x, y, tx, ty, DNGN_UNSEEN, DNGN_MAXOPAQUE) == 0);}
"unseen", "rock_wall", "stone_wall", "closed_door", "metal_wall","secret_door", "green_crystal_wall", "orcish_idol", "wax_wall","permarock_wall", "clear_rock_wall", "clear_stone_wall","clear_permarock_wall", "", "", "", "", "", "", "", "",
"unseen", "closed_door", "secret_door", "rock_wall", "stone_wall","metal_wall", "green_crystal_wall", "wax_wall", "permarock_wall","clear_rock_wall", "clear_stone_wall", "clear_permarock_wall","orcish_idol", "", "", "", "", "", "", "", "",
DNGN_ORCISH_IDOL,DNGN_WAX_WALL, // 8DNGN_PERMAROCK_WALL, // 9 - for undiggable wallsDNGN_CLEAR_ROCK_WALL, // 10 - TransparentDNGN_CLEAR_STONE_WALL, // 11 - TransparentDNGN_CLEAR_PERMAROCK_WALL, // 12 - Transparent
DNGN_WAX_WALL,DNGN_PERMAROCK_WALL, // 8 - for undiggable wallsDNGN_CLEAR_ROCK_WALL, // 9 - TransparentDNGN_CLEAR_STONE_WALL, // 10 - TransparentDNGN_CLEAR_PERMAROCK_WALL, // 11 - TransparentDNGN_ORCISH_IDOL, // 12 - Can see past// XXX: lowest/highest grid value which is a wallDNGN_MINWALL = DNGN_ROCK_WALL,DNGN_MAXWALL = DNGN_CLEAR_PERMAROCK_WALL,// XXX: highest grid value which is opaqueDNGN_MAXOPAQUE = DNGN_PERMAROCK_WALL,