-$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.260 $ $NHDT-Date: 1550784489 2019/02/21 21:28:09 $
+$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.261 $ $NHDT-Date: 1550800390 2019/02/22 01:53:10 $
This fixes36.2 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.1 in April 2018. Please note, however,
suitable to autoquiver it would pick the item in the inventory slot
corresponding to the direction letter from preceding 'fire' (and if
there was such an item, then ask for direction since ^A data ran out)
+early rolling boulder trap lacking any boulder might still have the corpse
+ of a dead adventurer
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
-/* 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. */
/* cannot find something reasonable -- strange */
x = xl;
y = yh;
-gotit:
+ gotit:
cc->x = x;
cc->y = y;
return;
sort_rooms()
{
#if defined(SYSV) || defined(DGUX)
- qsort((genericptr_t) rooms, (unsigned) nroom, sizeof(struct mkroom),
- do_comp);
+#define CAST_nroom (unsigned) nroom
#else
- qsort((genericptr_t) rooms, nroom, sizeof(struct mkroom), do_comp);
+#define CAST_nroom nroom /*as-is*/
#endif
+ qsort((genericptr_t) rooms, CAST_nroom, sizeof (struct mkroom), do_comp);
+#undef CAST_nroom
}
STATIC_OVL void
/* 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(&vault_x, &w, &vault_y, &h, TRUE)) {
- fill_vault:
+ fill_vault:
add_room(vault_x, vault_y, vault_x + w, vault_y + h, TRUE, VAULT,
FALSE);
level.flags.has_vault = 1;
mkroom(COCKNEST);
}
-skip0:
+ skip0:
/* Place multi-dungeon branch. */
place_branch(branchp, 0, 0);
if (!rn2(27 + 3 * abs(depth(&u.uz)))) {
char buf[BUFSZ];
const char *mesg = random_engraving(buf);
+
if (mesg) {
do {
x = somex(croom);
}
}
- skip_nonrogue:
+ skip_nonrogue:
if (!rn2(3)) {
(void) mkobj_at(0, somex(croom), somey(croom), TRUE);
tryct = 0;
coord *tm;
{
register int kind;
+ struct trap *t;
unsigned lvl = level_difficulty();
coord m;
|| (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);
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