|..X..
|.X}X.
|..X..
When testing the odd Samuari moats, I discovered that you could
easily walk diagonally between any two of the solid stone pillars
and fall into the water but you would always drown because it's a
no-teleport level and the crawl routine wouldn't let you back out
via that same diagonal.
The crawl routine is also being used by travel for the last step--a
post 3.6 change--so there was an unnecessary restriction on diagonal
movement there too.
-NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.614 $ $NHDT-Date: 1627951222 2021/08/03 00:40:22 $
+NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.615 $ $NHDT-Date: 1627951429 2021/08/03 00:43:49 $
General Fixes and Modified Features
-----------------------------------
the spell instead of teleporting on demand
describe a couple of isolated moat spots on Samurai quest home level as water
rather than as moat
+crawling out of water to avoid drowning didn't work as intended when trying
+ to move diagonally through a tight squeeze
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
-/* NetHack 3.7 hack.c $NHDT-Date: 1617035736 2021/03/29 16:35:36 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.281 $ */
+/* NetHack 3.7 hack.c $NHDT-Date: 1627951429 2021/08/03 00:43:49 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.291 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Derek S. Ray, 2015. */
/* NetHack may be freely redistributed. See license for details. */
return FALSE;
/* finally, are we trying to squeeze through a too-narrow gap? */
return !(bad_rock(g.youmonst.data, u.ux, y)
- && bad_rock(g.youmonst.data, x, u.uy));
+ && bad_rock(g.youmonst.data, x, u.uy)
+ && cant_squeeze_thru(&g.youmonst));
}
/* something like lookaround, but we are not running */
-/* NetHack 3.7 trap.c $NHDT-Date: 1615759958 2021/03/14 22:12:38 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.403 $ */
+/* NetHack 3.7 trap.c $NHDT-Date: 1627951430 2021/08/03 00:43:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.416 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2013. */
/* NetHack may be freely redistributed. See license for details. */
if (g.multi < 0 || (Upolyd && !g.youmonst.data->mmove))
goto crawl;
/* look around for a place to crawl to */
+#if 0
for (i = 0; i < 100; i++) {
x = rn1(3, u.ux - 1);
y = rn1(3, u.uy - 1);
crawl_ok = TRUE;
goto crawl;
}
+#else
+ {
+ int j, k, dirs[N_DIRS];
+
+ /* instead of picking a random direction up to 100 times, try each
+ of the eight directions at most once after shuffling their order */
+ for (i = 0; i < N_DIRS; ++i)
+ dirs[i] = i;
+ for (i = N_DIRS; i > 0; --i) {
+ j = rn2(i);
+ k = dirs[j];
+ dirs[j] = dirs[i - 1];
+ dirs[i - 1] = k;
+ }
+ for (i = 0; i < N_DIRS; ++i) {
+ x = u.ux + xdir[dirs[i]];
+ y = u.uy + ydir[dirs[i]];
+ /* note: crawl_dest calls goodpos() which performs isok() check */
+ if (crawl_destination(x, y)) {
+ crawl_ok = TRUE;
+ break;
+ }
+ }
+ }
+#endif
crawl:
if (crawl_ok) {
boolean lost = FALSE;