Skip to content

Commit

Permalink
fix #H261 - bias in Bresenham's algorithm in walk_path
Browse files Browse the repository at this point in the history
     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.
  • Loading branch information
nethack.rankin committed Mar 29, 2007
1 parent 8748bf5 commit b4f39da
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 6 deletions.
1 change: 1 addition & 0 deletions doc/fixes34.4
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions src/dothrow.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
Expand All @@ -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)))
Expand Down

0 comments on commit b4f39da

Please sign in to comment.