fix /e and /E

A fix in Janurary to avoid appending engraving text or headstone
text when examining a map location where a monster or object covers
the engraving or headstone inadvently broke the /e and /E variations
of the '/' command, which is intended to list such text even when
covered.
This commit is contained in:
PatR
2024-12-18 02:15:09 -08:00
parent faf2267aba
commit 65070b7462
2 changed files with 22 additions and 11 deletions

View File

@@ -1491,6 +1491,7 @@ artifact gifts are rebalanced (easier to obtain; higher-value sacrifices are
gifted enchanted; unaligned artifacts are possible but rare even on gifted enchanted; unaligned artifacts are possible but rare even on
the first gift; artifacts you can't use well are less likely) the first gift; artifacts you can't use well are less likely)
luck gains from sacrificing are limited by the value of the sacrifice luck gains from sacrificing are limited by the value of the sacrifice
failed #untrap could move hero diagonally into or out of an open doorway
Fixes to 3.7.0-x General Problems Exposed Via git Repository Fixes to 3.7.0-x General Problems Exposed Via git Repository
@@ -2071,6 +2072,10 @@ if a pile of objects had plain arrow(s) on top, map location classification
got confused and reported 'unexplored area' got confused and reported 'unexplored area'
when the 'fireassist' option was on, 'f' would choose uquiver over wielded when the 'fireassist' option was on, 'f' would choose uquiver over wielded
throw-and-return uwep throw-and-return uwep
knockback could move hero diagonally into or out of an open doorway
farlook of /e or /E stopped reporting engraving and headstone text after a fix
for the situation where // or ; reported such text when there was an
object or monster in the way
Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository

View File

@@ -50,7 +50,8 @@ staticfn void domenucontrols(void);
extern void port_help(void); extern void port_help(void);
#endif #endif
staticfn char *setopt_cmd(char *) NONNULL NONNULLARG1; staticfn char *setopt_cmd(char *) NONNULL NONNULLARG1;
staticfn boolean add_quoted_engraving(coordxy, coordxy, char *) NONNULLARG3; staticfn boolean add_quoted_engraving(coordxy, coordxy, char *, boolean)
NONNULLARG3;
enum checkfileflags { enum checkfileflags {
chkfilNone = 0, chkfilNone = 0,
@@ -1581,7 +1582,7 @@ do_screen_description(
*firstmatch = look_buf; *firstmatch = look_buf;
if (*(*firstmatch)) { if (*(*firstmatch)) {
Sprintf(temp_buf, " (%s", *firstmatch); Sprintf(temp_buf, " (%s", *firstmatch);
(void) add_quoted_engraving(cc.x, cc.y, temp_buf); (void) add_quoted_engraving(cc.x, cc.y, temp_buf, FALSE);
Strcat(temp_buf, ")"); Strcat(temp_buf, ")");
(void) strncat(out_str, temp_buf, (void) strncat(out_str, temp_buf,
BUFSZ - strlen(out_str) - 1); BUFSZ - strlen(out_str) - 1);
@@ -1600,7 +1601,10 @@ do_screen_description(
/* when farlook is reporting on an engraving, include its text */ /* when farlook is reporting on an engraving, include its text */
staticfn boolean staticfn boolean
add_quoted_engraving(coordxy x, coordxy y, char *buf) add_quoted_engraving(
coordxy x, coordxy y,
char *buf,
boolean force) /* True: '/e' or '/E', False: '//' or ';' */
{ {
char temp_buf[BUFSZ]; char temp_buf[BUFSZ];
struct engr *ep = engr_at(x, y); struct engr *ep = engr_at(x, y);
@@ -1617,7 +1621,10 @@ add_quoted_engraving(coordxy x, coordxy y, char *buf)
* or object) that happens to be on top of an engraving, so we won't * or object) that happens to be on top of an engraving, so we won't
* append the engraving text. * append the engraving text.
*/ */
if (!ep || (!floorengr && !headstone)) if (!ep)
return FALSE;
if (!floorengr && !headstone && !force)
return FALSE; return FALSE;
if (ep->eread) if (ep->eread)
@@ -2100,13 +2107,12 @@ look_engrs(boolean nearby)
if (!e) if (!e)
continue; continue;
glyph = glyph_at(x, y); glyph = glyph_at(x, y);
sym = ((levl[x][y].typ == GRAVE || svl.lastseentyp[x][y] == GRAVE) is_headstone = IS_GRAVE(svl.lastseentyp[x][y]);
? S_grave sym = (is_headstone ? S_grave
: (levl[x][y].typ == CORR) ? S_engrcorr : (levl[x][y].typ == CORR) ? S_engrcorr
: S_engroom); : S_engroom);
is_headstone = (sym == S_grave); Sprintf(lookbuf, " (%s", is_headstone ? "grave" : "engraving");
Sprintf(lookbuf, "(%s", is_headstone ? "grave" : "engraving"); (void) add_quoted_engraving(x, y, lookbuf, TRUE);
(void) add_quoted_engraving(x, y, lookbuf);
/* the paren is used by farlook and add_quoted_engraving() /* the paren is used by farlook and add_quoted_engraving()
expected to see it; we don't want it here */ expected to see it; we don't want it here */
if (is_headstone) { if (is_headstone) {
@@ -2114,7 +2120,7 @@ look_engrs(boolean nearby)
(void) strsubst(lookbuf, "(grave whose ", ""); (void) strsubst(lookbuf, "(grave whose ", "");
} else { } else {
(void) strsubst(lookbuf, "(engraving with ", ""); (void) strsubst(lookbuf, "(engraving with ", "");
(void) strsubst(lookbuf, "(engraving that ", "one that "); (void) strsubst(lookbuf, "(engraving ", "engraving ");
} }
if (glyph_is_cmap(glyph) && !glyph_is_trap(glyph)) { if (glyph_is_cmap(glyph) && !glyph_is_trap(glyph)) {
@@ -2150,7 +2156,7 @@ look_engrs(boolean nearby)
: (cmode == GPCOORDS_MAP) ? "%8s " : (cmode == GPCOORDS_MAP) ? "%8s "
: "%12s ", : "%12s ",
coord_desc(x, y, coordbuf, cmode)); coord_desc(x, y, coordbuf, cmode));
Sprintf(eos(outbuf), "%s ", encglyph(glyph)); Sprintf(eos(outbuf), "%s ", encglyph(glyph));
/* guard against potential overflow */ /* guard against potential overflow */
lookbuf[sizeof lookbuf - 1 - strlen(outbuf)] = '\0'; lookbuf[sizeof lookbuf - 1 - strlen(outbuf)] = '\0';
Strcat(outbuf, lookbuf); Strcat(outbuf, lookbuf);