From 44b9e2539710ab16aa046e626471d510b7d530b7 Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Thu, 15 Dec 2005 05:33:15 +0000 Subject: [PATCH] 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.... --- doc/fixes35.0 | 1 + src/shknam.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/fixes35.0 b/doc/fixes35.0 index c8ffe572b..e9a97e822 100644 --- a/doc/fixes35.0 +++ b/doc/fixes35.0 @@ -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 diff --git a/src/shknam.c b/src/shknam.c index 32b5c378d..c0cead964 100644 --- a/src/shknam.c +++ b/src/shknam.c @@ -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; -- 2.40.0