]> granicus.if.org Git - nethack/commitdiff
impossible worm_cross non-adjacent location
authorPatR <rankin@nethack.org>
Fri, 9 Nov 2018 23:43:50 +0000 (15:43 -0800)
committerPatR <rankin@nethack.org>
Fri, 9 Nov 2018 23:43:50 +0000 (15:43 -0800)
Attempting to mount a long worm tail could yield
\#ride -> mount_steed() -> test_move() -> worm_cross() ->
impossible("worm_cross checking for non-adjacent location").

doc/fixes36.2
src/steed.c

index fe1b5736f11b39013839e6e631fac6a42fc6c404..47452ff970d1cd3f7e72589b3fa9cba815c6da97 100644 (file)
@@ -187,6 +187,8 @@ add missing 'A - autoselect all' choice for menustyle:Full when taking items
        out while looting a container
 fix odd wording "The boulder triggers and fills a pit"
 ^X status feedback: don't report "not wearing any armor" when wearing a shield
+attempting to #ride a long worm's tail could trigger impossible "worm_cross
+       checking for non-adjacent location?"
 
 
 Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
index 1abdb867c92a4522b88ad3c39c8f5e4e1b6ada09..8cbf9d0efb7854566a01f892dbcedccc87bdefdc 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 steed.c $NHDT-Date: 1445906867 2015/10/27 00:47:47 $  $NHDT-Branch: master $:$NHDT-Revision: 1.47 $ */
+/* NetHack 3.6 steed.c $NHDT-Date: 1541806894 2018/11/09 23:41:34 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.54 $ */
 /* Copyright (c) Kevin Hugo, 1998-1999. */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -243,6 +243,16 @@ boolean force;      /* Quietly force this animal */
         pline("I see nobody there.");
         return (FALSE);
     }
+    if (mtmp->data == &mons[PM_LONG_WORM]
+        && (u.ux + u.dx != mtmp->mx || u.uy + u.dy != mtmp->my)) {
+        /* 3.6.2:  test_move(below) is used to check for trying to mount
+           diagonally into or out of a doorway or through a tight squeeze;
+           attempting to mount a tail segment when hero was not adjacent
+           to worm's head could trigger an impossible() in worm_cross()
+           called from test_move(), so handle not-on-head before that */
+        You("couldn't ride %s, let alone its tail.", a_monnam(mtmp));
+        return FALSE;
+    }
     if (u.uswallow || u.ustuck || u.utrap || Punished
         || !test_move(u.ux, u.uy, mtmp->mx - u.ux, mtmp->my - u.uy,
                       TEST_MOVE)) {