Added '@', which is to '!' as '.' is to the old '5'. Fixed 2146628: cancelling targeting was incorrectly checking range. The behaviour of allow_self_target is now slightly different (see forthcoming mail on crawl-ref-discuss.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7128 c06c8d41-db1a-0410-9941-cceddc491573
MVQRUYIXCXGGH7J7TN2GKUQL23EOBLYGPJL4TBQKCZR2D6DCL7XQC ON7HKKWM4CRYWNI5SZKKWI5Q5MVFOPC6QVKHXX3D66G7EOZEMGWAC SUWIERONPDATHPDMZRYO6GYIXSW6XIS5V5MK5IV23DWQH2LL7VIAC BFYHDL4EHSPKKC6EPKDRPESHYAA2WFKC6RXQIRRTSSTF3Z2QPVCAC IXW2IM5ITYDCXDB3ORDDVAR5XUSPVQ3BWLP3Q6TRXNTIKGMZTHXAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 7MMBAVNSUSNLVE2G6Z25C3TGHYAYLCOOXQ63KHXPYUMOOSKNGDKAC YAAJ6PTN6QUSWE52URI5AENOGD366FIHOIFUOXFUJLVZYE4OG6HQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC JFWC6LBPSC4SE52KE5FCBC2ZVCGLEJ6SJH5UUN5JRJLTNENENIJQC 4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC PFEJ4LMDNEKLMGRCMWQ7EIRVU4JMYGICI4G7X4WVWOROVXQCBZ7QC Y4NA3JSN63RLATF4NNBPSR5CWF5Z7UEMWCGVX4B6NOAR47CGM4GQC SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC 5XNQ3SSNBFXFNWA6DPM74W6FH65NX665P3DMH6YCWVFOPZTJSYCQC FNY62WM76UGY6IZQYRTRLSBLLUKUHL5N4CG5HQRSWTU2MYIXNJ5QC DVQMYOEH2UDXRU6254CIXZLCNPZD2ENZTBXXSHBDOHRIG6DZNRTQC SXLHOSCHX4BPRYRR35DI5GWISPIDKRFUSRVCYYHUUAYLAYFHSPBQC PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC UM5SXCMFB7WQCKCGH4GCG4MNWSVVXN2CGQ5KRFYX55YHLEU2QEWAC OVLN3RPH65K6TZHPINT2O42WI4BHLW7OTFQFPRSYHZU4UAAMER6QC YMLVBQ6M27MECUVMU3BQP3WSGR7GW4XJMQIHLGHHWMVXHMMIXOYAC XLLXDEUCIHZOCZVXPNUIXAA5MIT7T7YRDMXKRMTO43UEFNVQ77FQC DS2GZKISEP2DM2VU6EJ525Q7W3WVOKJXG5PY2OY4VNFCLBHVVOTAC ABLV37FMURRJPEZV2VRKOUYAKEMLI7E6RA4PDAII2EJ5L7WBHKZQC 45QV77UI6QFW4234P365LD3FGJYRVWTT5455DPB324NG2NFQMKTQC NS3KXJXQSN33UQSOBDK3WXXKA3KY5YOUJL67NBZKGQAJYDYZ2COQC bool _dist_ok(const dist& moves, int range, targ_mode_type mode,bool may_target_self, bool cancel_at_self){if (!moves.isCancel && moves.isTarget){if (!see_grid(moves.target)){mpr("Sorry, you can't target what you can't see.",MSGCH_EXAMINE_FILTER);return (false);}if (moves.target == you.pos()){// may_target_self == makes (some) sense to target yourself// (SPFLAG_AREA)// cancel_at_self == not allowed to target yourself// (SPFLAG_NOT_SELF)if (cancel_at_self){mpr("Sorry, you can't target yourself.", MSGCH_EXAMINE_FILTER);return (false);}if (!may_target_self && mode == TARG_ENEMY){if (Options.allow_self_target == CONFIRM_CANCEL){mpr("That would be overly suicidal.", MSGCH_EXAMINE_FILTER);return (false);}else if (Options.allow_self_target == CONFIRM_PROMPT){return yesno("Really target yourself?", false, 'n');}}}// Check rangeif (range >= 0 && grid_distance(moves.target, you.pos()) > range){mpr("That is beyond the maximum range.", MSGCH_EXAMINE_FILTER);return (false);}}// Some odd casesif (!moves.isValid && !moves.isCancel)return yesno("Are you sure you want to fizzle?", false, 'n');return (true);}
moves.isEndpoint = true;
case CMD_TARGET_SELECT_FORCE_ENDPOINT:if (key_command == CMD_TARGET_SELECT_ENDPOINT|| key_command == CMD_TARGET_SELECT_FORCE_ENDPOINT){moves.isEndpoint = true;}if (key_command == CMD_TARGET_SELECT_FORCE|| key_command == CMD_TARGET_SELECT_FORCE_ENDPOINT){allow_out_of_range = true;}
// A bunch of confirmation tests; if we survive them all,// then break out.// Confirm self-targeting on TARG_ENEMY (option-controlled.)// Conceivably we might want to confirm on TARG_ANY too.if (moves.isTarget&& moves.target == you.pos()&& mode == TARG_ENEMY&& (cancel_at_self|| Options.allow_self_target == CONFIRM_CANCEL&& !may_target_self|| (Options.allow_self_target == CONFIRM_PROMPT|| Options.allow_self_target == CONFIRM_CANCEL&& may_target_self)&& !yesno("Really target yourself?", false, 'n'))){if (cancel_at_self)mpr("Sorry, you can't target yourself.");else if (Options.allow_self_target == CONFIRM_CANCEL&& !may_target_self){mpr("That would be overly suicidal.", MSGCH_EXAMINE_FILTER);}
show_prompt = true;}else if (moves.isTarget && !see_grid(moves.target)){mpr("Sorry, you can't target what you can't see.",MSGCH_EXAMINE_FILTER);}else if (range >= 0&& grid_distance(moves.target, you.pos()) > range){mpr("That is beyond the maximum range.", MSGCH_EXAMINE_FILTER);}// Ask for confirmation if we're quitting for some odd reason.else if (moves.isValid || moves.isCancel|| yesno("Are you sure you want to fizzle?", false, 'n'))
if (_dist_ok(moves, allow_out_of_range ? -1 : range,mode, may_target_self, cancel_at_self))