more earthquake
When a drum of earthquake targets a secret door, reveal it (which is always followed by collapsing the door), and when it targets a secret corridor, reveal that corridor. Both situations also place a pit at the location.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.50 $ $NHDT-Date: 1578216006 2020/01/05 09:20:06 $
|
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.51 $ $NHDT-Date: 1578252630 2020/01/05 19:30:30 $
|
||||||
|
|
||||||
General Fixes and Modified Features
|
General Fixes and Modified Features
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
@@ -31,6 +31,7 @@ don't allow twoweapon combat if either weapon is a bow, crossbow, or sling
|
|||||||
drum of earthquake feedback reported various things (fountains, thrones, &c)
|
drum of earthquake feedback reported various things (fountains, thrones, &c)
|
||||||
falling into a chasm but they remained intact because trap creation
|
falling into a chasm but they remained intact because trap creation
|
||||||
had been changed to not clobber such things (so couldn't make pits)
|
had been changed to not clobber such things (so couldn't make pits)
|
||||||
|
make earthquake which hits a secret door or a secret corridor reveal it
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
10
src/detect.c
10
src/detect.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 detect.c $NHDT-Date: 1577050472 2019/12/22 21:34:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.110 $ */
|
/* NetHack 3.6 detect.c $NHDT-Date: 1578252630 2020/01/05 19:30:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.114 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2018. */
|
/*-Copyright (c) Robert Patrick Rankin, 2018. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -1447,14 +1447,14 @@ struct rm *lev;
|
|||||||
{
|
{
|
||||||
int newmask = lev->doormask & ~WM_MASK;
|
int newmask = lev->doormask & ~WM_MASK;
|
||||||
|
|
||||||
if (Is_rogue_level(&u.uz))
|
if (Is_rogue_level(&u.uz)) {
|
||||||
/* rogue didn't have doors, only doorways */
|
/* rogue didn't have doors, only doorways */
|
||||||
newmask = D_NODOOR;
|
newmask = D_NODOOR;
|
||||||
else
|
} else {
|
||||||
/* newly exposed door is closed */
|
/* newly exposed door is closed */
|
||||||
if (!(newmask & D_LOCKED))
|
if (!(newmask & D_LOCKED))
|
||||||
newmask |= D_CLOSED;
|
newmask |= D_CLOSED;
|
||||||
|
}
|
||||||
lev->typ = DOOR;
|
lev->typ = DOOR;
|
||||||
lev->doormask = newmask;
|
lev->doormask = newmask;
|
||||||
}
|
}
|
||||||
|
|||||||
57
src/music.c
57
src/music.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 music.c $NHDT-Date: 1578216006 2020/01/05 09:20:06 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.66 $ */
|
/* NetHack 3.6 music.c $NHDT-Date: 1578252632 2020/01/05 19:30:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.67 $ */
|
||||||
/* Copyright (c) 1989 by Jean-Christophe Collet */
|
/* Copyright (c) 1989 by Jean-Christophe Collet */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -268,6 +268,24 @@ int force;
|
|||||||
if (rn2(14 - force))
|
if (rn2(14 - force))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Possible extensions:
|
||||||
|
* When a door is trapped, explode it instead of silently
|
||||||
|
* turning it into an empty doorway.
|
||||||
|
* Trigger divine wrath when an altar is dumped into a chasm.
|
||||||
|
* Sometimes replace sink with fountain or fountain with pool
|
||||||
|
* instead of always producing a pit.
|
||||||
|
* Sometimes release monster and/or treasure from a grave or
|
||||||
|
* a throne instead of just dumping them into the chasm.
|
||||||
|
* Chance to destroy wall segments? Trees too?
|
||||||
|
* Honor non-diggable for locked doors, walls, and trees.
|
||||||
|
* Treat non-passwall as if it was non-diggable?
|
||||||
|
* Conjoin some of the umpteen pits when they're adjacent?
|
||||||
|
*
|
||||||
|
* Replace 'goto do_pit;' with 'do_pit = TRUE; break;' and
|
||||||
|
* move the pit code to after the switch.
|
||||||
|
*/
|
||||||
|
|
||||||
switch (levl[x][y].typ) {
|
switch (levl[x][y].typ) {
|
||||||
case FOUNTAIN: /* make the fountain disappear */
|
case FOUNTAIN: /* make the fountain disappear */
|
||||||
if (cansee(x, y))
|
if (cansee(x, y))
|
||||||
@@ -278,6 +296,7 @@ int force;
|
|||||||
pline_The("kitchen sink falls%s.", into_a_chasm);
|
pline_The("kitchen sink falls%s.", into_a_chasm);
|
||||||
goto do_pit;
|
goto do_pit;
|
||||||
case ALTAR:
|
case ALTAR:
|
||||||
|
/* always preserve the high altars */
|
||||||
if (Is_astralevel(&u.uz) || Is_sanctum(&u.uz))
|
if (Is_astralevel(&u.uz) || Is_sanctum(&u.uz))
|
||||||
break;
|
break;
|
||||||
/* no need to check for high altar here; we've just
|
/* no need to check for high altar here; we've just
|
||||||
@@ -295,19 +314,26 @@ int force;
|
|||||||
case THRONE:
|
case THRONE:
|
||||||
if (cansee(x, y))
|
if (cansee(x, y))
|
||||||
pline_The("throne falls%s.", into_a_chasm);
|
pline_The("throne falls%s.", into_a_chasm);
|
||||||
|
goto do_pit;
|
||||||
|
case SCORR:
|
||||||
|
levl[x][y].typ = CORR;
|
||||||
|
unblock_point(x, y);
|
||||||
|
if (cansee(x, y))
|
||||||
|
pline("A secret corridor is revealed.");
|
||||||
/*FALLTHRU*/
|
/*FALLTHRU*/
|
||||||
case ROOM:
|
case CORR:
|
||||||
case CORR: /* Try to make a pit */
|
case ROOM: /* Try to make a pit. */
|
||||||
do_pit:
|
do_pit:
|
||||||
/* maketrap() won't replace furniture with a trap,
|
/* maketrap() won't replace furniture with a trap,
|
||||||
so remove the furniture first */
|
so remove the furniture first */
|
||||||
if (levl[x][y].typ != CORR) {
|
if (levl[x][y].typ != CORR) {
|
||||||
if (levl[x][y].typ != DOOR)
|
if (levl[x][y].typ != DOOR) {
|
||||||
levl[x][y].typ = ROOM;
|
levl[x][y].typ = ROOM;
|
||||||
levl[x][y].flags = 0; /* clear doormask (D_NODOOR) or
|
/* clear blessed fountain, disturbed grave */
|
||||||
* altarmask or looted throne */
|
levl[x][y].horizontal = 0;
|
||||||
levl[x][y].horizontal = 0; /* clear blessed fountain,
|
}
|
||||||
* disturbed grave */
|
/* clear doormask, altarmask, looted throne */
|
||||||
|
levl[x][y].flags = 0; /* same as 'doormask = D_NODOOR' */
|
||||||
}
|
}
|
||||||
chasm = maketrap(x, y, PIT);
|
chasm = maketrap(x, y, PIT);
|
||||||
if (!chasm)
|
if (!chasm)
|
||||||
@@ -415,18 +441,23 @@ int force;
|
|||||||
newsym(x, y);
|
newsym(x, y);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SDOOR:
|
||||||
|
cvt_sdoor_to_door(&levl[x][y]); /* .typ = DOOR */
|
||||||
|
if (cansee(x, y))
|
||||||
|
pline("A secret door is revealed.");
|
||||||
|
/*FALLTHRU*/
|
||||||
case DOOR: /* make the door collapse */
|
case DOOR: /* make the door collapse */
|
||||||
|
/* if already doorless, treat like room or corridor */
|
||||||
if (levl[x][y].doormask == D_NODOOR)
|
if (levl[x][y].doormask == D_NODOOR)
|
||||||
goto do_pit;
|
goto do_pit;
|
||||||
/* TODO: if door is trapped, the trap should explode;
|
/* wasn't doorless, now it will be */
|
||||||
forcing D_NODOOR just makes trap silently go away */
|
levl[x][y].doormask = D_NODOOR;
|
||||||
|
unblock_point(x, y);
|
||||||
|
newsym(x, y); /* before pline */
|
||||||
if (cansee(x, y))
|
if (cansee(x, y))
|
||||||
pline_The("door collapses.");
|
pline_The("door collapses.");
|
||||||
if (*in_rooms(x, y, SHOPBASE))
|
if (*in_rooms(x, y, SHOPBASE))
|
||||||
add_damage(x, y, 0L);
|
add_damage(x, y, 0L);
|
||||||
levl[x][y].doormask = D_NODOOR;
|
|
||||||
unblock_point(x, y);
|
|
||||||
newsym(x, y);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user