fix #H261 - bias in Bresenham's algorithm in walk_path

From a bug report, walk_path() was
favoring orthogonal steps at beginning of the path and diagonal ones at
end, when intermixing diagonal and orthoganal produced a more accurate
representation of the real path.  Only mattered for long distance jumps
3x2 or 3x1 steps away; hurtling always moves in a straight line and short
(2x1 knight) jumps aren't affected by the patch supplied with the report.
This commit is contained in:
nethack.rankin
2007-03-29 04:03:35 +00:00
parent 8748bf5334
commit b4f39da9dd
2 changed files with 7 additions and 6 deletions

View File

@@ -342,6 +342,7 @@ lit candle or potion of oil which burned out while equipped would leave stale
wielded/worn figurine which auto-transformed had same stale pointer bug
format names of not yet id'd artifacts such that obj type shows for non-weapons
make quest leader and nemesis be unlikely to be affected by traps
use a more precise jumping path for far, non-straight line destinations
Platform- and/or Interface-Specific Fixes

View File

@@ -433,10 +433,10 @@ walk_path(src_cc, dest_cc, check_proc, arg)
prev_x = x;
prev_y = y;
y += y_change;
err += dx;
if (err >= dy) {
err += dx << 1;
if (err > dy) {
x += x_change;
err -= dy;
err -= dy << 1;
}
/* check for early exit condition */
if (!(keep_going = (*check_proc)(arg, x, y)))
@@ -447,10 +447,10 @@ walk_path(src_cc, dest_cc, check_proc, arg)
prev_x = x;
prev_y = y;
x += x_change;
err += dy;
if (err >= dx) {
err += dy << 1;
if (err > dx) {
y += y_change;
err -= dx;
err -= dx << 1;
}
/* check for early exit condition */
if (!(keep_going = (*check_proc)(arg, x, y)))