Something I noticed when testing the item-action handling for name and
call; applies to the C/#name command too. You were allowed to call the
real Amulet something and allowed to call fake ones something [else].
If you did that, xname/doname didn't show it but the discoveries list
did, giving away information when the player had access to more than
one unID'd Amulet of Yendor. Rather than messing about with discovery
handling, make real and fake Amulet be ineligible from being given a
type name. (They can still be given individual names.)
bit being set if sanity_check was On
when drinking or dipping, allow the 'm' prefix to be used to skip asking
about fountains and pools
+calling real or fake Amulet something could give away information about them
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
return TRUE;
switch(objects[i].oc_class) {
+ case AMULET_CLASS:
+ /* 3.7: calling these used to be allowed but that enabled the
+ player to tell whether two unID'd amulets of yendor were both
+ fake or one was real by calling them distinct names and then
+ checking discoveries to see whether first name was replaced
+ by second or both names stuck; with more than two available
+ to work with, if they weren't all fake it was possible to
+ determine which one was the real one */
+ if (i == AMULET_OF_YENDOR || i == FAKE_AMULET_OF_YENDOR)
+ break; /* return FALSE */
+ /*FALLTHRU*/
case SCROLL_CLASS:
case POTION_CLASS:
case WAND_CLASS:
case RING_CLASS:
- case AMULET_CLASS:
case GEM_CLASS:
case SPBOOK_CLASS:
case ARMOR_CLASS:
!(is_plural(otmp) || pair_of(otmp)) ? "that" : "those", s3);
else
#endif
+ /* see comment about Amulet of Yendor in objtyp_is_callable(do_name.c);
+ known fakes yield the silly thing feedback */
+ if (!strcmp(word, "call")
+ && (otmp->otyp == AMULET_OF_YENDOR
+ || (otmp->otyp == FAKE_AMULET_OF_YENDOR && !otmp->known)))
+ pline_The("Amulet doesn't like being called names.");
+ else
pline(silly_thing_to, word);
}