From be3659d7316d1ad13d42fac594a869729b921ea8 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 26 Mar 2023 17:32:54 -0400 Subject: [PATCH] restrict where the engraving symbol shows up rooms and corridor locations that have been seen don't hide stairs --- include/engrave.h | 6 ++++++ src/display.c | 12 ++++++++---- src/engrave.c | 16 ++++++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/include/engrave.h b/include/engrave.h index 0a5e20079..e50d44314 100644 --- a/include/engrave.h +++ b/include/engrave.h @@ -39,4 +39,10 @@ struct engr { #define engraving_to_defsym(ep) \ (levl[(ep)->engr_x][(ep)->engr_y].typ == CORR ? S_engrcorr : S_engroom) +#define spot_shows_engravings(x,y) \ + (levl[(x)][(y)].typ == CORR \ + || levl[(x)][(y)].typ == SCORR \ + || levl[(x)][(y)].typ == ICE \ + || levl[(x)][(y)].typ == ROOM ) + #endif /* ENGRAVE_H */ diff --git a/src/display.c b/src/display.c index 877f9b546..539b1b8e0 100644 --- a/src/display.c +++ b/src/display.c @@ -416,12 +416,14 @@ unmap_object(register coordxy x, register coordxy y) if ((trap = t_at(x, y)) != 0 && trap->tseen && !covers_traps(x, y)) { map_trap(trap, 0); - } else if ((ep = engr_at(x, y)) != 0 && !covers_traps(x, y)) { - map_engraving(ep, 0); } else if (levl[x][y].seenv) { struct rm *lev = &levl[x][y]; - map_background(x, y, 0); + if (spot_shows_engravings(x, y) + && (ep = engr_at(x, y)) != 0 && !covers_traps(x, y)) + map_engraving(ep, 0); + else + map_background(x, y, 0); /* turn remembered dark room squares dark */ if (!lev->waslit && lev->glyph == cmap_to_glyph(S_room) @@ -450,7 +452,9 @@ unmap_object(register coordxy x, register coordxy y) map_object(obj, show); \ else if ((trap = t_at(x, y)) && trap->tseen && !covers_traps(x, y)) \ map_trap(trap, show); \ - else if ((ep = engr_at(x, y)) && !covers_traps(x, y)) \ + else if (spot_shows_engravings(x, y) \ + && (ep = engr_at(x, y)) != 0 \ + && !covers_traps(x, y)) \ map_engraving(ep, show); \ else \ map_background(x, y, show); \ diff --git a/src/engrave.c b/src/engrave.c index 1033334c2..a54c310a5 100644 --- a/src/engrave.c +++ b/src/engrave.c @@ -317,8 +317,13 @@ void read_engr_at(coordxy x, coordxy y) { struct engr *ep = engr_at(x, y); + const char *eloc = surface(x, y); int sensed = 0; + if (!spot_shows_engravings(x, y)) { + if (On_stairs(x, y)) + eloc = "stairs"; + } /* Sensing an engraving does not require sight, * nor does it necessarily imply comprehension (literacy). */ @@ -335,21 +340,20 @@ read_engr_at(coordxy x, coordxy y) case HEADSTONE: if (!Blind || can_reach_floor(TRUE)) { sensed = 1; - pline("%s is engraved here on the %s.", Something, - surface(x, y)); + pline("%s is engraved here on the %s.", Something, eloc); } break; case BURN: if (!Blind || can_reach_floor(TRUE)) { sensed = 1; pline("Some text has been %s into the %s here.", - is_ice(x, y) ? "melted" : "burned", surface(x, y)); + is_ice(x, y) ? "melted" : "burned", eloc); } break; case MARK: if (!Blind) { sensed = 1; - pline("There's some graffiti on the %s here.", surface(x, y)); + pline("There's some graffiti on the %s here.", eloc); } break; case ENGR_BLOOD: @@ -1052,6 +1056,10 @@ doengrave(void) } eloc = surface(u.ux, u.uy); + if (!spot_shows_engravings(u.ux, u.uy)) { + if (On_stairs(u.ux, u.uy)) + eloc = "stairs"; + } adding = (oep && !eow); switch (type) { default: