fix #S14702 - travel to covered vibrating square
Targeting '~' when vibrating square has been discovered would report "Can't find dungeon feature '~'" if it was covered by an object or a monster. That's normal behavior for a trap but the vibrating square is only one of those for display purposes.
This commit is contained in:
+4
-1
@@ -1,4 +1,4 @@
|
|||||||
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1575 $ $NHDT-Date: 1762750699 2025/11/09 20:58:19 $
|
NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1576 $ $NHDT-Date: 1763708572 2025/11/20 23:02:52 $
|
||||||
|
|
||||||
General Fixes and Modified Features
|
General Fixes and Modified Features
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
@@ -1532,6 +1532,9 @@ some food and paper items do no damage when bashing
|
|||||||
improved messages for oilskin sacks protecting from water damage
|
improved messages for oilskin sacks protecting from water damage
|
||||||
some messages by amorous demons and mail daemon were delivered as verbal ones
|
some messages by amorous demons and mail daemon were delivered as verbal ones
|
||||||
even when the hero is deaf
|
even when the hero is deaf
|
||||||
|
travel couldn't find the vibrating square if it was covered by an object or
|
||||||
|
a monster; it isn't really a trap so treat it as special terrain
|
||||||
|
travel would stop one step in front of known vibrating square like other traps
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
||||||
|
|||||||
+7
-1
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 detect.c $NHDT-Date: 1745114235 2025/04/19 17:57:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.190 $ */
|
/* NetHack 3.7 detect.c $NHDT-Date: 1763708572 2025/11/20 23:02:52 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.191 $ */
|
||||||
/* 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. */
|
||||||
@@ -2179,6 +2179,12 @@ reveal_terrain_getglyph(
|
|||||||
keep_mons = (which_subset & TER_MON) != 0,
|
keep_mons = (which_subset & TER_MON) != 0,
|
||||||
full = (which_subset & TER_FULL) != 0;
|
full = (which_subset & TER_FULL) != 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME:
|
||||||
|
* travel treats discovered vibrating square as if it were terrain
|
||||||
|
* rather than a trap so this should do so too.
|
||||||
|
*/
|
||||||
|
|
||||||
/* for 'full', show the actual terrain for the entire level,
|
/* for 'full', show the actual terrain for the entire level,
|
||||||
otherwise what the hero remembers for seen locations with
|
otherwise what the hero remembers for seen locations with
|
||||||
monsters, objects, and/or traps removed as caller dictates */
|
monsters, objects, and/or traps removed as caller dictates */
|
||||||
|
|||||||
+28
-5
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 getpos.c $NHDT-Date: 1723875487 2024/08/17 06:18:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ */
|
/* NetHack 3.7 getpos.c $NHDT-Date: 1763708572 2025/11/20 23:02:52 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.6 $ */
|
||||||
/*-Copyright (c) Pasi Kallinen, 2023. */
|
/*-Copyright (c) Pasi Kallinen, 2023. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ staticfn void gloc_filter_floodfill(coordxy, coordxy);
|
|||||||
staticfn void gloc_filter_init(void);
|
staticfn void gloc_filter_init(void);
|
||||||
staticfn void gloc_filter_done(void);
|
staticfn void gloc_filter_done(void);
|
||||||
staticfn void gather_locs(coord **, int *, int);
|
staticfn void gather_locs(coord **, int *, int);
|
||||||
|
staticfn boolean known_vibrating_square_at(coordxy, coordxy);
|
||||||
staticfn void truncate_to_map(coordxy *, coordxy *, schar, schar);
|
staticfn void truncate_to_map(coordxy *, coordxy *, schar, schar);
|
||||||
staticfn void getpos_refresh(void);
|
staticfn void getpos_refresh(void);
|
||||||
/* Callback function for getpos() to highlight desired map locations.
|
/* Callback function for getpos() to highlight desired map locations.
|
||||||
@@ -192,7 +193,7 @@ getpos_help(boolean force, const char *goal)
|
|||||||
putstr(tmpwin, 0, sbuf);
|
putstr(tmpwin, 0, sbuf);
|
||||||
putstr(tmpwin, 0, "Or enter a background symbol (ex. '<').");
|
putstr(tmpwin, 0, "Or enter a background symbol (ex. '<').");
|
||||||
Sprintf(sbuf, "Use '%s' to move the cursor on yourself.",
|
Sprintf(sbuf, "Use '%s' to move the cursor on yourself.",
|
||||||
visctrl(gc.Cmd.spkeys[NHKF_GETPOS_SELF]));
|
visctrl(gc.Cmd.spkeys[NHKF_GETPOS_SELF]));
|
||||||
putstr(tmpwin, 0, sbuf);
|
putstr(tmpwin, 0, sbuf);
|
||||||
if (!iflags.terrainmode || (iflags.terrainmode & TER_MON) != 0) {
|
if (!iflags.terrainmode || (iflags.terrainmode & TER_MON) != 0) {
|
||||||
getpos_help_keyxhelp(tmpwin,
|
getpos_help_keyxhelp(tmpwin,
|
||||||
@@ -417,10 +418,26 @@ gloc_filter_done(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
staticfn boolean
|
||||||
|
known_vibrating_square_at(coordxy x, coordxy y)
|
||||||
|
{
|
||||||
|
/* note: this only acknowledges the genuine vibrating square, not
|
||||||
|
fake ones produced by wizard mode wishing for traps which could
|
||||||
|
possibly be transfered to normal play via bones file */
|
||||||
|
if (invocation_pos(x, y)) {
|
||||||
|
struct trap *ttmp = t_at(x, y);
|
||||||
|
|
||||||
|
return ttmp && ttmp->ttyp == VIBRATING_SQUARE && ttmp->tseen;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
DISABLE_WARNING_UNREACHABLE_CODE
|
DISABLE_WARNING_UNREACHABLE_CODE
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
gather_locs_interesting(coordxy x, coordxy y, int gloc)
|
gather_locs_interesting(
|
||||||
|
coordxy x, coordxy y,
|
||||||
|
int gloc)
|
||||||
{
|
{
|
||||||
int glyph, sym;
|
int glyph, sym;
|
||||||
|
|
||||||
@@ -439,7 +456,7 @@ gather_locs_interesting(coordxy x, coordxy y, int gloc)
|
|||||||
/* unlike '/M', this skips monsters revealed by
|
/* unlike '/M', this skips monsters revealed by
|
||||||
warning glyphs and remembered unseen ones */
|
warning glyphs and remembered unseen ones */
|
||||||
return (glyph_is_monster(glyph)
|
return (glyph_is_monster(glyph)
|
||||||
&& glyph != monnum_to_glyph(PM_LONG_WORM_TAIL,MALE)
|
&& glyph != monnum_to_glyph(PM_LONG_WORM_TAIL, MALE)
|
||||||
&& glyph != monnum_to_glyph(PM_LONG_WORM_TAIL, FEMALE));
|
&& glyph != monnum_to_glyph(PM_LONG_WORM_TAIL, FEMALE));
|
||||||
case GLOC_OBJS:
|
case GLOC_OBJS:
|
||||||
return (glyph_is_object(glyph)
|
return (glyph_is_object(glyph)
|
||||||
@@ -482,7 +499,8 @@ gather_locs_interesting(coordxy x, coordxy y, int gloc)
|
|||||||
|| is_cmap_room(sym)
|
|| is_cmap_room(sym)
|
||||||
|| is_cmap_corr(sym)))
|
|| is_cmap_corr(sym)))
|
||||||
|| glyph_is_nothing(glyph)
|
|| glyph_is_nothing(glyph)
|
||||||
|| glyph_is_unexplored(glyph)));
|
|| glyph_is_unexplored(glyph))
|
||||||
|
|| known_vibrating_square_at(x, y));
|
||||||
}
|
}
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1069,6 +1087,11 @@ getpos(coord *ccp, boolean force, const char *goal)
|
|||||||
&& matching[glyph_to_cmap(k)])
|
&& matching[glyph_to_cmap(k)])
|
||||||
goto foundc;
|
goto foundc;
|
||||||
}
|
}
|
||||||
|
/* FIXME: check player-specified vib.sq trap
|
||||||
|
symbol rather than or in addition to '~' */
|
||||||
|
if (c == '~'
|
||||||
|
&& known_vibrating_square_at(tx, ty))
|
||||||
|
goto foundc;
|
||||||
/* last, try actual terrain here (shouldn't
|
/* last, try actual terrain here (shouldn't
|
||||||
we be using svl.lastseentyp[][] instead?) */
|
we be using svl.lastseentyp[][] instead?) */
|
||||||
if (levl[tx][ty].seenv) {
|
if (levl[tx][ty].seenv) {
|
||||||
|
|||||||
+5
-2
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 hack.c $NHDT-Date: 1736530208 2025/01/10 09:30:08 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.477 $ */
|
/* NetHack 3.7 hack.c $NHDT-Date: 1763708572 2025/11/20 23:02:52 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.494 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Derek S. Ray, 2015. */
|
/*-Copyright (c) Derek S. Ray, 2015. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -2425,7 +2425,10 @@ avoid_moving_on_trap(coordxy x, coordxy y, boolean msg)
|
|||||||
{
|
{
|
||||||
struct trap *trap;
|
struct trap *trap;
|
||||||
|
|
||||||
if ((trap = t_at(x, y)) && trap->tseen) {
|
if ((trap = t_at(x, y)) && trap->tseen
|
||||||
|
/* the vibrating square is implemented as a trap but treated as if
|
||||||
|
it were a type of terrain */
|
||||||
|
&& trap->ttyp != VIBRATING_SQUARE) {
|
||||||
if (msg && flags.mention_walls) {
|
if (msg && flags.mention_walls) {
|
||||||
set_msg_xy(x, y);
|
set_msg_xy(x, y);
|
||||||
You("stop in front of %s.",
|
You("stop in front of %s.",
|
||||||
|
|||||||
Reference in New Issue
Block a user