so that * and / work for unknown ones, and + and - for known
ones. Also, mimics become known if you hit them since the
resulting message ("moderately damaged" or "looks slightly
unstable") will give that away anyway.
Implement the first part of FR 1903048: Added a range parameter to direction(), so that when targeting for weapons of reaching we can check whether a monster is within the range of 2 squares (grid_distance). Does not handle submerged monsters. Eventually, this could be used to also limit max range for certain spells (Freeze, I'm looking at you!)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3995 c06c8d41-db1a-0410-9941-cceddc491573
TPPJRQ2NTCV3GI2VRHEXQJREDERPJODCJWUG5WCOQGN4REPPPAMAC WXJLQMSTJV5ZVB5DQVEYEJJEG3CXGNPHJZYFBFV36BCFEVWYW3HAC 22YVHM74WBJNJE4PA5CBEUTDWM6FAGGGILI26A4LXAURX55TNRKAC 45EMD3KLQPMERNMIKU5G76H6556XOMIW352TSBP7VLWJX2YYGS7AC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC EAAACIJUVSBDOB6S73O4NFSMRDLFLQTFO7SXWWALGMVDZTQTHQBQC CE6FLTWU5PYFBSGVTIJXQXRMHOIHQ3VJCKHQVIMUUAIFHQ73X7NAC TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC FU7EQZLXD7YNGUUDHXCBI3VUKL6M2G3EPDY6FB5UA6B6RD4S5UOQC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC EOMCPVNQLX3IMLC46EAO67DPBH5KEG2FQTPBLGU62HIRWA3UQ7XQC HSRRNAU5UAYC6B6IQWGJPFROMZBTJICPCH6DJVZDHDTAGOQ6IOYAC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC 45QV77UI6QFW4234P365LD3FGJYRVWTT5455DPB324NG2NFQMKTQC YAAJ6PTN6QUSWE52URI5AENOGD366FIHOIFUOXFUJLVZYE4OG6HQC XCEZ7OA2INNPSYNAB5U6JB7XNDAD5BKU26YLFPPZ3SEESFZKADQAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC 547JREUJXTZNYVGHNNAET5F5O5JYYGNTDQB6ABZNT7YX5EY64OHAC PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC 4PBRMB7TK2TXL7VSDKMUQMT4QFK3SGRU4TUVMEM7V2VS7KKKILAQC FEGNPOJI2SALUA2PVIXIQ2CIXFLSXD7UB7CNUSAAKV4L3POXCRFQC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC targ_mode_type mode = TARG_ANY, bool just_looking = false,bool needs_path = true, const char *prompt = NULL,targeting_behaviour *mod = NULL );
targ_mode_type mode = TARG_ANY, int range = -1,bool just_looking = false, bool needs_path = true,const char *prompt = NULL, targeting_behaviour *mod = NULL );
static bool find_object( int x, int y, int mode );static bool find_monster( int x, int y, int mode );static bool find_feature( int x, int y, int mode );
static bool find_object( int x, int y, int mode, int range );static bool find_monster( int x, int y, int mode, int range );static bool find_feature( int x, int y, int mode, int range );
return (targ_mon != NON_MONSTER&& in_los(x, y)&& player_monster_visible( &(menv[targ_mon]) )&& !mons_is_mimic( menv[targ_mon].type )&& (mode == TARG_ANY|| (mode == TARG_FRIEND && mons_friendly( &menv[targ_mon] ))|| (mode == TARG_ENEMY&& !mons_friendly( &menv[targ_mon] )&&(Options.target_zero_exp ||!mons_class_flag( menv[targ_mon].type, M_NO_EXP_GAIN )) )));
// don't target out of rangeif (!_is_target_in_range(x, y, range))return (false);const int targ_mon = mgrd[ x ][ y ];// Is target a (known) monster?if (targ_mon == NON_MONSTER || !in_los(x,y)|| !player_monster_visible( &(menv[targ_mon]) )|| mons_is_mimic(menv[targ_mon].type)&& !(menv[targ_mon].flags & MF_KNOWN_MIMIC)){return (false);}// Now compare target modes.if (mode == TARG_ANY)return true;if (mode == TARG_FRIEND)return (mons_friendly(&menv[targ_mon] ));if (mode != TARG_ENEMY)return false;return ( !mons_friendly( &menv[targ_mon] )&& (Options.target_zero_exp|| !mons_class_flag( menv[targ_mon].type, M_NO_EXP_GAIN )) );
// The square need not be in LOS if the stash tracker knows this item.return (item != NON_ITEM&& (in_los(x, y)|| (Options.target_oos && is_terrain_seen(x, y)&& is_stash(x, y))));
if (item == NON_ITEM && !is_mimic)return false;return (in_los(x, y) || Options.target_oos && is_terrain_seen(x, y)&& (is_stash(x, y) || is_mimic));
monster_teleport( mimic, !one_chance_in(3) );
}const bool instant_tele = !one_chance_in(3);monster_teleport( mimic, instant_tele );// at least for this short while, we know it's a mimicif (!instant_tele && should_id)mimic->flags |= MF_KNOWN_MIMIC;