There is now a separate fallback_ray() that needs to be called explicitly. I've manually converted uses of find_ray with allow_fallback == true.
find_ray with allow_fallback set always returned true, yet there were a number of places that used the return value, in particular in directn.cc. I'll check these later.
TZNURHCLTLE3A55EPNU66BU6NX7LOBA7EFG4NAJJBUKZLOAEFU4AC
M7RPJOAAK7UTJP2JDNKT2JWW3QWFSUFMJPN33ASPFDOZQAD2DRDQC
DDYDJKL5CGSTC3NGTOBCNKHDTG5LX5F4U7VNZN2YAK5ANLT7UO5AC
HAHX6NKIVDCUYFBNF2SPRFGIPTWMJVCQNASKJE5GMFQ63KTDNJAAC
J2TAQGBG2YV7TWJZ5KQWM3FYBCTLWMRTS7QCIUBGLX62AXQLYZXQC
KMF52RF3NIY2ABMHEZABT3GOG3KCHEJD55NBJ3IPAOHBKF2WPKQAC
PKK5BBJU6ZPC5TP2HLCWJQV73S6JMTBNJJEJKAZIX53AEHMWQYHAC
IFYZSFWJRTV6JM46H6U4CMTQX46VT562EAM64Y6UYU3F6RDWRRYQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
IDMROPT5ZXZEODQHIPYUAXEO5DVQEAOUYWFQ6GAB6RIDS3STL3SQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
ACZYEIX7WMPIIODKCATBCUE626AJ4ZGGBOMVC6BGXM27EQU2RECAC
3ORZZ66JXYWJUO4W5YP2JRKKZ6ZNMHU7QWAF2QMKH4LFWNNMPM7QC
PEWNWU7TD3LETUMWCCI365KH7PVV2XCUOIFTPBH2LK2ZPGS4URZAC
T7CCGLOZ25B7BQKKGR6IA6LWBRKUWTXLTIRXUQ4YKQRVAA7AHZKQC
2MVY3CA2SGUEQDDHIFOLAJ7N532M4ZYZT7LSCPWZR7VKPMRX2CQAC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
SIDH2P7NBIG5KEOE27XHD3ZT2NQ2OJZFN6VZXWNWYFFY5YVXSSVQC
XCL4GC6RUWUK57HONM5CRUEOCCECR4NYAI5KLPJKCYM5OURU3AYQC
CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC
NLSZ4SHFD6LN6AWB3HLLKQTCKQW55ZHEW3YM7XRAVAKIPD3C3Q3AC
VD4KDTGHVKCN35AWREYB4TEOUMCTW7SAUPAMTMF5ABC7VBHVKP4AC
TGJZXTUIAKCFZQJ54ZQEBGFBVZSJCAX6AWDRSH3TP7UJRLGUM5SAC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
DK76MINM4TMQKZ6HKMJZMZM7QPGQUO3YY3I226G7JDUYJJLWKWAQC
6DNNPEMZGBQDMA7YG4LCTQUVZ7LYPC3R4A2XBYT5SDQ65GYOLJVAC
UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
bool find_ray( const coord_def& source, const coord_def& target,
bool allow_fallback, ray_def& ray, int cycle_dir = 0,
bool find_shortest = false, bool ignore_solid = false );
bool find_ray(const coord_def& source, const coord_def& target,
ray_def& ray, int cycle_dir = 0, bool find_shortest = false,
bool ignore_solid = false);
void fallback_ray(const coord_def& source, const coord_def& target,
ray_def& ray);
if (allow_fallback)
{
#ifdef DEBUG_DIAGNOSTICS
coord_def src = t.transform(coord_def(0,0));
coord_def trg = t.transform(target);
mprf(MSGCH_DIAGNOSTICS,
"falling back in ray search: (%d,%d) to (%d,%d)",
src.x, src.y, trg.x, trg.y);
#endif
ray.accx = 0.5;
ray.accy = 0.5;
if (target.x == 0)
ray.slope = VERTICAL_SLOPE;
else
ray.slope = target.y / target.x;
ray.fullray_idx = -1;
return (true);
}
return (false);
return (found);
}
void fallback_ray(const coord_def& source, const coord_def& target,
ray_def& ray)
{
ray.accx = source.x + 0.5;
ray.accy = source.y + 0.5;
coord_def diff = target - source;
ray.slope = _calc_slope(std::abs(diff.x), std::abs(diff.y));
_set_ray_quadrant(ray, source.x, source.y, target.x, target.y);
show_beam = find_ray(you.pos(), moves.target,
true, ray, (show_beam ? 1 : 0));
// XXX: show_beam was conditional on find_ray
// with fallback succeeding.
if (!find_ray(you.pos(), moves.target,
ray, (show_beam ? 1 : 0)))
fallback_ray(you.pos(), moves.target, ray);
show_beam = true;
show_beam = find_ray(you.pos(), moves.target,
true, ray, 0, true);
// 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);
show_beam = true;
need_beam_redraw = show_beam
&& find_ray(you.pos(), moves.target, true, ray,
0, true)
&& !_blocked_ray(moves.target);
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);
}