shopkeeper names when hallucinating (trunk only)

A bug report complained that Izchak is identifiable when the hero is
hallucinating.  That's true but it wasn't particular to him; all shop
transactions were giving accurate shk name regardless of hallucination.
This is a quick fix that avoids changing shk message handling:  pick some
shk name at random each time one is used.  I didn't intend for it to also
force Izchak to use the general chat response instead of his set of special
messages, but that ends up happening due to randomized name not matching
his, so you really can't recognize him when hallucinating anymore.

     The almost never seen names now have a chance to come into play....
This commit is contained in:
nethack.rankin
2005-12-15 05:33:15 +00:00
parent ea13ecbe29
commit 44b9e25397
2 changed files with 18 additions and 1 deletions

View File

@@ -103,6 +103,7 @@ grammar bit if killed by stealing a cockatrice corpse from a monster
being petrified by swallowing a cockatrice violates foodless conduct
devouring Medusa whole is fatal
eating pet won't continue eating after becoming paralyzed or falling asleep
randomize shopkeeper names when hallucinating
Platform- and/or Interface-Specific Fixes

View File

@@ -1,4 +1,4 @@
/* SCCS Id: @(#)shknam.c 3.5 2005/03/05 */
/* SCCS Id: @(#)shknam.c 3.5 2005/12/14 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
@@ -653,6 +653,22 @@ struct monst *mtmp;
{
const char *shknm = ESHK(mtmp)->shknam;
if (Hallucination && !program_state.gameover) {
const char * const *nlp;
int num;
/* count the number of non-unique shop types;
pick one randomly, ignoring shop generation probabilities;
pick a name at random from that shop type's list */
for (num = 0; num < SIZE(shtypes); num++)
if (shtypes[num].prob == 0) break;
if (num > 0) {
nlp = shtypes[rn2(num)].shknms;
for (num = 0; nlp[num]; num++) continue;
if (num > 0) shknm = nlp[rn2(num)];
}
}
/* strip prefix if present */
if (!letter(*shknm)) ++shknm;
return shknm;