wizard mode ^V crash in endgame

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.
This commit is contained in:
nethack.rankin
2003-12-13 14:51:38 +00:00
parent 86428dc172
commit 41d3ad8c4e
2 changed files with 5 additions and 2 deletions

View File

@@ -4,6 +4,8 @@ General Fixes and Modified Features
-----------------------------------
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

View File

@@ -1,4 +1,4 @@
/* 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. */
@@ -1222,7 +1222,8 @@ random_teleport_level()
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: