eating off floor while blind

Reported directly to devteam in late December, when blind and
lacking gloves, you could safely locate cockatrice corpses on the
floor by using 'm' prefix to move without pickup followed by 'e'
and then answering no when ask whether to eat a cockatrice corpse.
This commit is contained in:
PatR
2016-06-14 16:43:03 -07:00
parent b47a456630
commit 7e257dc7e8
2 changed files with 14 additions and 2 deletions

View File

@@ -292,6 +292,8 @@ at startup, if sysconf had been read but user's own config file couldn't be
read, sysconf got processed again as if it contained user's options
don't give "you cannot pass through the bars" when travel is testing possible
paths in the vicinity of iron bars
if blind and no gloves, using 'm<dir>' to move and then 'e' could be used to
locate cockatrice corpse without fatal touching (by declining to eat)
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository

View File

@@ -3009,6 +3009,16 @@ int corpsecheck; /* 0, no check, 1, corpses, 2, tinnable corpses */
char qsfx[QBUFSZ];
boolean one = (otmp->quan == 1L);
/* if blind and without gloves, attempting to eat (or tin or
offer) a cockatrice corpse is fatal before asking whether
or not to use it; otherwise, 'm<dir>' followed by 'e' could
be used to locate cockatrice corpses without touching them */
if (otmp->otyp == CORPSE && will_feel_cockatrice(otmp, FALSE)) {
feel_cockatrice(otmp, FALSE);
/* if life-saved (or poly'd into stone golem), terminate
attempt to eat off floor */
return (struct obj *) 0;
}
/* "There is <an object> here; <verb> it?" or
"There are <N objects> here; <verb> one?" */
Sprintf(qbuf, "There %s ", otense(otmp, "are"));
@@ -3026,8 +3036,8 @@ skipfloor:
/* We cannot use ALL_CLASSES since that causes getobj() to skip its
* "ugly checks" and we need to check for inedible items.
*/
otmp =
getobj(feeding ? allobj : offering ? offerfodder : comestibles, verb);
otmp = getobj(feeding ? allobj : offering ? offerfodder : comestibles,
verb);
if (corpsecheck && otmp && !(offering && otmp->oclass == AMULET_CLASS))
if (otmp->otyp != CORPSE || (corpsecheck == 2 && !tinnable(otmp))) {
You_cant("%s that!", verb);