crossing long worms' tails (trunk only)
This is one of the items from "#Q397: List of Bugs from #nethack" sent
in Janurary by <email deleted> and containing a list
of things collected from the IRC channel associated with nethack.alt.org's
public server. Moving diagonally between segments of a worm tail is
conceptually passing right through the worm's body. This patch prevents
moving in such a fashion for both the hero and monsters (it's still
possible to fight in that position though). It only applies when the two
tail segments are consecutive.
|...... In the diagram here, where tail segments are represented by
|.w1?.. digits indicating relative sequence number, the @ can still
|..@2.. move between segments 2 and 5 to reach !, but can no longer
|.65!3. move between 1 and 2 to reach ?. [However, if there is a
|...4.. monster at the ? spot, it can still hit @ and vice versa.]
Missiles and wand zaps still pass through such diagonals without
noticing or affecting the worm. I'm not sure whether this ought to be
extended to change that--it might get pretty messy since it would need
to be considered during monsters' targetting as well as during the path
traversal itself.
This commit is contained in:
@@ -708,6 +708,10 @@ int mode;
|
||||
default:
|
||||
break; /* can squeeze through */
|
||||
}
|
||||
} else if (dx && dy && worm_cross(ux, uy, x, y)) {
|
||||
/* consecutive long worm segments are at <ux,y> and <x,uy> */
|
||||
if (mode == DO_MOVE) pline("%s is in your way.", Monnam(m_at(ux, y)));
|
||||
return FALSE;
|
||||
}
|
||||
/* Pick travel path that does not require crossing a trap.
|
||||
* Avoid water and lava using the usual running rules.
|
||||
@@ -828,7 +832,7 @@ boolean guess;
|
||||
int y = travelstepy[set][i];
|
||||
static int ordered[] = { 0, 2, 4, 6, 1, 3, 5, 7 };
|
||||
/* no diagonal movement for grid bugs */
|
||||
int dirmax = u.umonnum == PM_GRID_BUG ? 4 : 8;
|
||||
int dirmax = NODIAG(u.umonnum) ? 4 : 8;
|
||||
|
||||
for (dir = 0; dir < dirmax; ++dir) {
|
||||
int nx = x+xdir[ordered[dir]];
|
||||
|
||||
Reference in New Issue
Block a user