Merge branch 'NetHack-3.7' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.7
This commit is contained in:
+3
-1
@@ -1,4 +1,4 @@
|
|||||||
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.87 $ $NHDT-Date: 1580633720 2020/02/02 08:55:20 $
|
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.94 $ $NHDT-Date: 1581210469 2020/02/09 01:07:49 $
|
||||||
|
|
||||||
General Fixes and Modified Features
|
General Fixes and Modified Features
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
@@ -53,6 +53,8 @@ poly'd hero was able to zap wands, apply tools, and #rub objects without
|
|||||||
spellcasting monster got an extra move after casting
|
spellcasting monster got an extra move after casting
|
||||||
allow defining #wizgenesis quantity in the prompt
|
allow defining #wizgenesis quantity in the prompt
|
||||||
digging through iron bars from an adjacent pit made a pit on top of the bars
|
digging through iron bars from an adjacent pit made a pit on top of the bars
|
||||||
|
give feedback if controlled level teleport attempt fails because hero is
|
||||||
|
already on the bottom level and player tries to go even deeper
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
+31
-15
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 teleport.c $NHDT-Date: 1576288434 2019/12/14 01:53:54 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.106 $ */
|
/* NetHack 3.6 teleport.c $NHDT-Date: 1581210886 2020/02/09 01:14:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.112 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2011. */
|
/*-Copyright (c) Robert Patrick Rankin, 2011. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -785,6 +785,7 @@ boolean break_the_rules; /* True: wizard mode ^T */
|
|||||||
void
|
void
|
||||||
level_tele()
|
level_tele()
|
||||||
{
|
{
|
||||||
|
static const char get_there_from[] = "get there from %s.";
|
||||||
register int newlev;
|
register int newlev;
|
||||||
d_level newlevel;
|
d_level newlevel;
|
||||||
const char *escape_by_flying = 0; /* when surviving dest of -N */
|
const char *escape_by_flying = 0; /* when surviving dest of -N */
|
||||||
@@ -900,7 +901,7 @@ level_tele()
|
|||||||
* status line, and consequently it should be incremented to
|
* status line, and consequently it should be incremented to
|
||||||
* the value of the logical depth of the target level.
|
* the value of the logical depth of the target level.
|
||||||
*
|
*
|
||||||
* we let negative values requests fall into the "heaven" loop.
|
* we let negative values requests fall into the "heaven" handling.
|
||||||
*/
|
*/
|
||||||
if (In_quest(&u.uz) && newlev > 0)
|
if (In_quest(&u.uz) && newlev > 0)
|
||||||
newlev = newlev + g.dungeons[u.uz.dnum].depth_start - 1;
|
newlev = newlev + g.dungeons[u.uz.dnum].depth_start - 1;
|
||||||
@@ -924,7 +925,7 @@ level_tele()
|
|||||||
int llimit = dunlevs_in_dungeon(&u.uz);
|
int llimit = dunlevs_in_dungeon(&u.uz);
|
||||||
|
|
||||||
if (newlev >= 0 || newlev <= -llimit) {
|
if (newlev >= 0 || newlev <= -llimit) {
|
||||||
You_cant("get there from here.");
|
You_cant(get_there_from, "here");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
newlevel.dnum = u.uz.dnum;
|
newlevel.dnum = u.uz.dnum;
|
||||||
@@ -991,25 +992,34 @@ level_tele()
|
|||||||
/* calls done(ESCAPED) if newlevel==0 */
|
/* calls done(ESCAPED) if newlevel==0 */
|
||||||
if (escape_by_flying) {
|
if (escape_by_flying) {
|
||||||
You("%s.", escape_by_flying);
|
You("%s.", escape_by_flying);
|
||||||
newlevel.dnum = 0; /* specify main dungeon */
|
|
||||||
newlevel.dlevel = 0; /* escape the dungeon */
|
|
||||||
/* [dlevel used to be set to 1, but it doesn't make sense to
|
/* [dlevel used to be set to 1, but it doesn't make sense to
|
||||||
teleport out of the dungeon and float or fly down to the
|
teleport out of the dungeon and float or fly down to the
|
||||||
surface but then actually arrive back inside the dungeon] */
|
surface but then actually arrive back inside the dungeon] */
|
||||||
|
newlevel.dnum = 0; /* specify main dungeon */
|
||||||
|
newlevel.dlevel = 0; /* escape the dungeon */
|
||||||
|
} else if (force_dest) {
|
||||||
|
/* wizard mode menu; no further validation needed */
|
||||||
|
;
|
||||||
} else if (u.uz.dnum == medusa_level.dnum
|
} else if (u.uz.dnum == medusa_level.dnum
|
||||||
&& newlev >= g.dungeons[u.uz.dnum].depth_start
|
&& newlev >= g.dungeons[u.uz.dnum].depth_start
|
||||||
+ dunlevs_in_dungeon(&u.uz)) {
|
+ dunlevs_in_dungeon(&u.uz)) {
|
||||||
if (!(wizard && force_dest))
|
find_hell(&newlevel);
|
||||||
find_hell(&newlevel);
|
|
||||||
} else {
|
} else {
|
||||||
|
/* FIXME: we should avoid using hard-coded knowledge of
|
||||||
|
which branches don't connect to anything deeper;
|
||||||
|
mainly used to distinguish "can't get there from here"
|
||||||
|
vs "from anywhere" rather than to control destination */
|
||||||
|
d_level *branch = In_quest(&u.uz) ? &qstart_level
|
||||||
|
: In_mines(&u.uz) ? &mineend_level
|
||||||
|
: &sanctum_level;
|
||||||
|
int deepest = g.dungeons[branch->dnum].depth_start
|
||||||
|
+ dunlevs_in_dungeon(branch) - 1;
|
||||||
|
|
||||||
/* if invocation did not yet occur, teleporting into
|
/* if invocation did not yet occur, teleporting into
|
||||||
* the last level of Gehennom is forbidden.
|
* the last level of Gehennom is forbidden.
|
||||||
*/
|
*/
|
||||||
if (!wizard && Inhell && !u.uevent.invoked
|
if (!wizard && Inhell && !u.uevent.invoked && newlev >= deepest) {
|
||||||
&& newlev >= (g.dungeons[u.uz.dnum].depth_start
|
newlev = deepest - 1;
|
||||||
+ dunlevs_in_dungeon(&u.uz) - 1)) {
|
|
||||||
newlev = g.dungeons[u.uz.dnum].depth_start
|
|
||||||
+ dunlevs_in_dungeon(&u.uz) - 2;
|
|
||||||
pline("Sorry...");
|
pline("Sorry...");
|
||||||
}
|
}
|
||||||
/* no teleporting out of quest dungeon */
|
/* no teleporting out of quest dungeon */
|
||||||
@@ -1019,12 +1029,18 @@ level_tele()
|
|||||||
* we must translate newlev to a number relative to the
|
* we must translate newlev to a number relative to the
|
||||||
* current dungeon.
|
* current dungeon.
|
||||||
*/
|
*/
|
||||||
if (!(wizard && force_dest))
|
get_level(&newlevel, newlev);
|
||||||
get_level(&newlevel, newlev);
|
|
||||||
|
if (on_level(&newlevel, &u.uz) && newlev != depth(&u.uz)) {
|
||||||
|
You_cant(get_there_from,
|
||||||
|
(newlev > deepest) ? "anywhere" : "here");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
schedule_goto(&newlevel, FALSE, FALSE, 0, (char *) 0,
|
schedule_goto(&newlevel, FALSE, FALSE, 0, (char *) 0,
|
||||||
flags.verbose ? "You materialize on a different level!" : (char *)0);
|
flags.verbose ? "You materialize on a different level!"
|
||||||
|
: (char *) 0);
|
||||||
|
|
||||||
/* in case player just read a scroll and is about to be asked to
|
/* in case player just read a scroll and is about to be asked to
|
||||||
call it something, we can't defer until the end of the turn */
|
call it something, we can't defer until the end of the turn */
|
||||||
|
|||||||
Reference in New Issue
Block a user