From 41d3ad8c4e374144d8e8dc0d38fa040139c1fdfe Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Sat, 13 Dec 2003 14:51:38 +0000 Subject: [PATCH] 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. --- doc/fixes34.4 | 2 ++ src/teleport.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 59a309b8e..c0cbdfff4 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -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 diff --git a/src/teleport.c b/src/teleport.c index 79e917830..99f344611 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -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: -- 2.40.0