Existence of a valid ray is now tracked with a separate boolean have_beam. fallback_ray has been removed almost completely. The change appears fine in console crawl; tiles untested at the moment.
find_ray now correctly returns false for rays with source == target.
Also rename CMD_TARGET_HIDE_BEAM to CMD_TARGET_TOGGLE_BEAM.
3MCIHHM7HEXQPZHF2MZBUV3STJHRMVSUTWENFM3KUYIQXI5FJ2GAC
DAZD5SKZ3BZ52OQRF2OOU4UPRDOJDVZPMXQAEUWEMKHW53AFHMLQC
TZNURHCLTLE3A55EPNU66BU6NX7LOBA7EFG4NAJJBUKZLOAEFU4AC
QNDI5MFPHZZXZOJFF2IELF2LIHWVY2HGFRCJWYEFN4WL4ICYZUYQC
ACZYEIX7WMPIIODKCATBCUE626AJ4ZGGBOMVC6BGXM27EQU2RECAC
SKWBAGSAB625IIN4UP3NCPRX2H3KCPC2LULHS2A7JVRLO3EUBJDAC
VD4KDTGHVKCN35AWREYB4TEOUMCTW7SAUPAMTMF5ABC7VBHVKP4AC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
MVQRUYIXCXGGH7J7TN2GKUQL23EOBLYGPJL4TBQKCZR2D6DCL7XQC
BC24BZTIVJ6GORK7XXGHQ7YXKYBEPFCTKVCANZE6PEXY4L3ZQMCAC
TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC
HSRRNAU5UAYC6B6IQWGJPFROMZBTJICPCH6DJVZDHDTAGOQ6IOYAC
EAAACIJUVSBDOB6S73O4NFSMRDLFLQTFO7SXWWALGMVDZTQTHQBQC
CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC
NLSZ4SHFD6LN6AWB3HLLKQTCKQW55ZHEW3YM7XRAVAKIPD3C3Q3AC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC
TXENGSZD2F6LFYQVN3MGWO2LH4H6F4756NIMQZL2B3MXIAGN5AQAC
YAAJ6PTN6QUSWE52URI5AENOGD366FIHOIFUOXFUJLVZYE4OG6HQC
4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC
ABLV37FMURRJPEZV2VRKOUYAKEMLI7E6RA4PDAII2EJ5L7WBHKZQC
DDYDJKL5CGSTC3NGTOBCNKHDTG5LX5F4U7VNZN2YAK5ANLT7UO5AC
LW4N5EHKL776DURXZMAM6JEW3JPWWX5BSNP7TCZHTLCDOQTTGFCAC
Y4NA3JSN63RLATF4NNBPSR5CWF5Z7UEMWCGVX4B6NOAR47CGM4GQC
YMLVBQ6M27MECUVMU3BQP3WSGR7GW4XJMQIHLGHHWMVXHMMIXOYAC
DMG73XDQHY2X2PHKWIY56XKD3O4NPGZKKIO6GX3IV2LLRVXPGKYQC
DK76MINM4TMQKZ6HKMJZMZM7QPGQUO3YY3I226G7JDUYJJLWKWAQC
XCL4GC6RUWUK57HONM5CRUEOCCECR4NYAI5KLPJKCYM5OURU3AYQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
JN4GPMQCXOY5ICTLPLWP6DXBFULN4GMAEK7T4GXTZVIJAUUKBBYAC
GQF26J3LYUS35FFHOV4N26QHSJIA5GXMNBXVVKDGX7YMFBFJK4LQC
NS3KXJXQSN33UQSOBDK3WXXKA3KY5YOUJL67NBZKGQAJYDYZ2COQC
ray_def ray;
if (!find_ray(you.pos(), moves.target, ray, 0, true))
fallback_ray(you.pos(), moves.target, ray);
moves.ray = ray;
moves.choseRay = find_ray(you.pos(), moves.target,
moves.ray, 0, true);
ray_def ray;
if (!find_ray(you.pos(), moves.target, ray, 0, true))
fallback_ray(you.pos(), moves.target, ray);
moves.ray = ray;
moves.choseRay = find_ray(you.pos(), moves.target,
moves.ray, 0, true);
// We have to turn off show_beam, because
// when jumping to a previous target we don't
// care about the beam; otherwise Bad Things
// will happen because the ray is invalid,
// and we don't get a chance to update it before
// breaking from the loop.
show_beam = false;
have_beam = false;
// XXX: show_beam was conditional on find_ray
// with fallback succeeding.
if (!find_ray(you.pos(), moves.target, ray, 0, true))
fallback_ray(you.pos(), moves.target, ray);
have_beam = find_ray(you.pos(), moves.target,
ray, 0, true);
need_beam_redraw = true;
if (!need_beam_redraw)
{
if (show_beam)
{
if (!find_ray(you.pos(), moves.target, ray, 0, true))
fallback_ray(you.pos(), moves.target, ray);
need_beam_redraw = !_blocked_ray(moves.target);
}
}
if (show_beam)
need_beam_redraw = true;