Merge branch 'NetHack-3.6.2'

This commit is contained in:
nhmall
2019-02-22 08:47:37 -05:00
7 changed files with 1176 additions and 1037 deletions

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 mklev.c $NHDT-Date: 1511681724 2017/11/26 07:35:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.47 $ */
/* NetHack 3.6 mklev.c $NHDT-Date: 1550800390 2019/02/22 01:53:10 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.59 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Alex Smith, 2017. */
/* NetHack may be freely redistributed. See license for details. */
@@ -87,7 +87,7 @@ xchar xl, yl, xh, yh;
/* cannot find something reasonable -- strange */
x = xl;
y = yh;
gotit:
gotit:
cc->x = x;
cc->y = y;
return;
@@ -97,11 +97,12 @@ void
sort_rooms()
{
#if defined(SYSV) || defined(DGUX)
qsort((genericptr_t) g.rooms, (unsigned) g.nroom, sizeof(struct mkroom),
do_comp);
#define CAST_nroom (unsigned) g.nroom
#else
qsort((genericptr_t) g.rooms, g.nroom, sizeof(struct mkroom), do_comp);
#define CAST_nroom g.nroom /*as-is*/
#endif
qsort((genericptr_t) rooms, CAST_nroom, sizeof (struct mkroom), do_comp);
#undef CAST_nroom
}
STATIC_OVL void
@@ -726,11 +727,12 @@ makelevel()
/* make a secret treasure vault, not connected to the rest */
if (do_vault()) {
xchar w, h;
debugpline0("trying to make a vault...");
w = 1;
h = 1;
if (check_room(&g.vault_x, &w, &g.vault_y, &h, TRUE)) {
fill_vault:
fill_vault:
add_room(g.vault_x, g.vault_y, g.vault_x + w, g.vault_y + h, TRUE, VAULT,
FALSE);
g.level.flags.has_vault = 1;
@@ -783,7 +785,7 @@ makelevel()
mkroom(COCKNEST);
}
skip0:
skip0:
/* Place multi-dungeon branch. */
place_branch(branchp, 0, 0);
@@ -846,6 +848,7 @@ skip0:
if (!rn2(27 + 3 * abs(depth(&u.uz)))) {
char buf[BUFSZ];
const char *mesg = random_engraving(buf);
if (mesg) {
do {
x = somex(croom);
@@ -857,7 +860,7 @@ skip0:
}
}
skip_nonrogue:
skip_nonrogue:
if (!rn2(3)) {
(void) mkobj_at(0, somex(croom), somey(croom), TRUE);
tryct = 0;
@@ -1257,6 +1260,7 @@ struct mkroom *croom;
coord *tm;
{
register int kind;
struct trap *t;
unsigned lvl = level_difficulty();
coord m;
@@ -1365,7 +1369,11 @@ coord *tm;
|| (avoid_boulder && sobj_at(BOULDER, m.x, m.y)));
}
(void) maketrap(m.x, m.y, kind);
t = maketrap(m.x, m.y, kind);
/* we should always get type of trap we're asking for (occupied() test
should prevent cases where that might not happen) but be paranoid */
kind = t ? t->ttyp : NO_TRAP;
if (kind == WEB)
(void) makemon(&mons[PM_GIANT_SPIDER], m.x, m.y, NO_MM_FLAGS);
@@ -1390,8 +1398,13 @@ coord *tm;
lethal, and tend not to generate on shallower levels anyway.
Finally, pits are excluded because it's weird to see an item
in a pit and yet not be able to identify that the pit is there. */
if (lvl <= (unsigned) rnd(4)
if (kind != NO_TRAP && lvl <= (unsigned) rnd(4)
&& kind != SQKY_BOARD && kind != RUST_TRAP
/* rolling bounder trap might not have a boulder if there was no
viable path (such as when placed in the corner of a room), in
which case tx,ty==launch.x,y; no boulder => no dead predecessor */
&& !(kind == ROLLING_BOULDER_TRAP
&& t->launch.x == t->tx && t->launch.y == t->ty)
&& !is_pit(kind) && kind < HOLE) {
/* Object generated by the trap; initially NULL, stays NULL if
we fail to generate an object or if the trap doesn't