fix #H30 - rn2(0) from off by 1 bug in special level door creation

From a bug report, the placement
of random doors by the code that loads special levels would attempt to
evaluate rn2(0) and either get a divide by zero crash (normal build) or an
impossible warning (DEBUG enabled when compiing rnd.c, done automatically
when BETA is defined).  The problem was only noticable for random door in
a 1x1 room; none of our distributed levels specify such a thing so regular
users won't have encountered this bug.  It's a one line fix.

     Altar placement in temples also had a quirk of a similar nature.  It
wouldn't trigger rn2(0) problems but would always place the altar to left
of mid-point in rooms with even width and above the center point in ones
with even height.  Now the placement is randomized so that sometimes it'll
be to the right and/or below mid-point in such cases.

     This also simplifies a couple other instances of similar expressions
that I spotted.
This commit is contained in:
nethack.rankin
2006-01-29 04:32:04 +00:00
parent 0a52d1879f
commit e2dd0a12ae
4 changed files with 22 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)sp_lev.c 3.5 2006/01/02 */
/* SCCS Id: @(#)sp_lev.c 3.5 2006/01/28 */
/* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
@@ -620,7 +620,8 @@ struct mkroom *broom;
dpos = dd->pos;
if (dpos == -1) /* The position is RANDOM */
dpos = rn2((dwall == W_WEST || dwall == W_EAST) ?
(broom->hy - broom->ly) : (broom->hx - broom->lx));
(broom->hy - broom->ly + 1) :
(broom->hx - broom->lx + 1));
/* Convert wall and pos into an absolute coordinate! */