Mentioned in passing in the newsgroup: level teleporting in the
endgame--which is only possible in wizard mode--can crash if you're
confused. The change to make confusion sometimes override teleport
control means that sometimes a random destination will be chosen, and
the routine to choose a random level can call rn2() with a value less
than 1 in the endgame, possibly resulting in attempt to divide by 0.
There's something fishy about the min_/max_depth stuff for the
endgame, but I haven't attempted to figure that out. This just makes
the random destination always be the current level when in the endgame
so that the problem can't come up.
-----------------------------------
fix "You hear The food ration tumbles downwards" for blinded pit dropping
silver arrows weren't causing silver damage on some silver-haters when wielded
+wizard mode: avoid division by 0 crash for level teleport in the endgame if
+ confusion overrides teleport control
Platform- and/or Interface-Specific Fixes
-/* SCCS Id: @(#)teleport.c 3.4 2003/12/01 */
+/* SCCS Id: @(#)teleport.c 3.4 2003/12/12 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
int nlev, max_depth, min_depth,
cur_depth = (int)depth(&u.uz);
- if (!rn2(5) || Is_knox(&u.uz))
+ /* [the endgame case can only occur in wizard mode] */
+ if (!rn2(5) || Is_knox(&u.uz) || In_endgame(&u.uz))
return cur_depth;
/* What I really want to do is as follows: