Accurately track which items have been discovered, even if not #named

This fixes a couple of bugs: a long-standing bug in which writing a
scroll by label could fail even if you've already seen a scroll with
that label (due to the game not tracking whether or not you've seen a
scroll if it doesn't have a name); and a somewhat newer bug in which
spellbooks auto-identified by Wizard knowledge were marked as having
been encountered (rather than as known but not encountered).

Breaks save file compatibility, but not bones files.
This commit is contained in:
Alex Smith
2025-11-25 22:42:38 +00:00
parent 10a5e67478
commit 8c29b20010
38 changed files with 155 additions and 122 deletions

View File

@@ -346,7 +346,7 @@ map_object(struct obj *obj, int show)
neardist = (r * r) * 2 - r; /* same as r*r + r*(r-1) */
if (distu(x, y) <= neardist) {
obj->dknown = 1;
observe_object(obj);
glyph = obj_to_glyph(obj, newsym_rn2);
}
}
@@ -1585,7 +1585,7 @@ see_nearby_objects(void)
if (!cansee(ix, iy) || distu(ix, iy) > neardist)
continue;
obj->dknown = 1; /* near enough to see it */
observe_object(obj);
/* operate on remembered glyph rather than current one */
glyph = levl[ix][iy].glyph;
if (glyph_is_generic_object(glyph))