pull request #857 - levelport destination by name
Pull request from entrez: specifying a level teleport destination by level name allowed non-wizard mode controlled level teleport to move across dungeon branchs. Does not affect wizard mode '^V ?' or 'm ^V'. Closes #857
This commit is contained in:
+14
-8
@@ -1975,6 +1975,14 @@ level_difficulty(void)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* within same branch, or else main dungeon <-> gehennom */
|
||||||
|
#define dlev_in_current_branch(dlev) \
|
||||||
|
(dlev.dnum == u.uz.dnum \
|
||||||
|
|| (u.uz.dnum == valley_level.dnum \
|
||||||
|
&& dlev.dnum == medusa_level.dnum) \
|
||||||
|
|| (u.uz.dnum == medusa_level.dnum \
|
||||||
|
&& dlev.dnum == valley_level.dnum))
|
||||||
|
|
||||||
/* Take one word and try to match it to a level.
|
/* Take one word and try to match it to a level.
|
||||||
* Recognized levels are as shown by print_dungeon().
|
* Recognized levels are as shown by print_dungeon().
|
||||||
*/
|
*/
|
||||||
@@ -1982,7 +1990,7 @@ schar
|
|||||||
lev_by_name(const char *nam)
|
lev_by_name(const char *nam)
|
||||||
{
|
{
|
||||||
schar lev = 0;
|
schar lev = 0;
|
||||||
s_level *slev = (s_level *)0;
|
s_level *slev = (s_level *) 0;
|
||||||
d_level dlev;
|
d_level dlev;
|
||||||
const char *p;
|
const char *p;
|
||||||
int idx, idxtoo;
|
int idx, idxtoo;
|
||||||
@@ -2017,12 +2025,7 @@ lev_by_name(const char *nam)
|
|||||||
|
|
||||||
if (mseen || slev) {
|
if (mseen || slev) {
|
||||||
idx = ledger_no(&dlev);
|
idx = ledger_no(&dlev);
|
||||||
if ((dlev.dnum == u.uz.dnum
|
if (dlev_in_current_branch(dlev)
|
||||||
/* within same branch, or else main dungeon <-> gehennom */
|
|
||||||
|| (u.uz.dnum == valley_level.dnum
|
|
||||||
&& dlev.dnum == medusa_level.dnum)
|
|
||||||
|| (u.uz.dnum == medusa_level.dnum
|
|
||||||
&& dlev.dnum == valley_level.dnum))
|
|
||||||
&& (/* either wizard mode or else seen and not forgotten */
|
&& (/* either wizard mode or else seen and not forgotten */
|
||||||
wizard
|
wizard
|
||||||
|| (g.level_info[idx].flags & (VISITED))
|
|| (g.level_info[idx].flags & (VISITED))
|
||||||
@@ -2048,13 +2051,16 @@ lev_by_name(const char *nam)
|
|||||||
idx = idxtoo;
|
idx = idxtoo;
|
||||||
dlev.dnum = ledger_to_dnum(idx);
|
dlev.dnum = ledger_to_dnum(idx);
|
||||||
dlev.dlevel = ledger_to_dlev(idx);
|
dlev.dlevel = ledger_to_dlev(idx);
|
||||||
lev = depth(&dlev);
|
if (dlev_in_current_branch(dlev))
|
||||||
|
lev = depth(&dlev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lev;
|
return lev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef dlev_in_current_branch
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
unplaced_floater(struct dungeon *dptr)
|
unplaced_floater(struct dungeon *dptr)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user