diff --git a/doc/fixes33.2 b/doc/fixes33.2 index 1e2adca45..ab716e1be 100644 --- a/doc/fixes33.2 +++ b/doc/fixes33.2 @@ -388,6 +388,7 @@ going down to floor using > should set Heart of Ahriman invocation timeout riding a steed into water kills the steed if it cannot swim, with penalties gaze attacks now stop occupation proper death message when killed by "plain" high priest +don't conceal the identity of Moloch's high priest blessed full healing can't recover levels lost when polymorphing into new man blessed full healing can reciver at most half of other lost levels golden glow when praying will recover lost level if blessed full healing could diff --git a/include/extern.h b/include/extern.h index 6508184c1..2a40f3df4 100644 --- a/include/extern.h +++ b/include/extern.h @@ -332,6 +332,7 @@ E char *FDECL(y_monnam, (struct monst *)); E char *FDECL(Adjmonnam, (struct monst *,const char *)); E char *FDECL(Amonnam, (struct monst *)); E char *FDECL(a_monnam, (struct monst *)); +E char *FDECL(distant_monnam, (struct monst *,int,char *)); E const char *NDECL(rndmonnam); E const char *FDECL(hcolor, (const char *)); #ifdef REINCARNATION diff --git a/src/do_name.c b/src/do_name.c index a1e0bfec9..b24b81668 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)do_name.c 3.3 2000/06/12 */ +/* SCCS Id: @(#)do_name.c 3.3 2002/01/17 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -268,10 +268,7 @@ do_mname() return(0); } /* special case similar to the one in lookat() */ - if (mtmp->data != &mons[PM_HIGH_PRIEST]) - Strcpy(buf, x_monnam(mtmp, ARTICLE_THE, (char *)0, 0, TRUE)); - else - Sprintf(buf, "the high priest%s", mtmp->female ? "ess" : ""); + (void) distant_monnam(mtmp, ARTICLE_THE, buf); Sprintf(qbuf, "What do you want to call %s?", buf); getlin(qbuf,buf); if(!*buf || *buf == '\033') return(0); @@ -844,6 +841,27 @@ register struct monst *mtmp; return(bp); } +/* used for monster ID by the '/', ';', and 'C' commands to block remote + identification of the endgame altars via their attending priests */ +char * +distant_monnam(mon, article, outbuf) +struct monst *mon; +int article; /* only ARTICLE_NONE and ARTICLE_THE are handled here */ +char *outbuf; +{ + /* high priest(ess)'s identity is concealed on the Astral Plane, + unless you're adjacent (overridden for hallucination which does + its own obfuscation) */ + if (mon->data == &mons[PM_HIGH_PRIEST] && !Hallucination && + Is_astralevel(&u.uz) && distu(mon->mx, mon->my) > 2) { + Strcpy(outbuf, article == ARTICLE_THE ? "the " : ""); + Strcat(outbuf, mon->female ? "high priestess" : "high priest"); + } else { + Strcpy(outbuf, x_monnam(mon, article, (char *)0, 0, TRUE)); + } + return outbuf; +} + static const char *bogusmons[] = { "jumbo shrimp", "giant pigmy", "gnu", "killer penguin", "giant cockroach", "giant slug", "maggot", "pterodactyl", diff --git a/src/pager.c b/src/pager.c index 08d469eac..143a8ca54 100644 --- a/src/pager.c +++ b/src/pager.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)pager.c 3.3 2001/06/10 */ +/* SCCS Id: @(#)pager.c 3.3 2002/01/17 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -98,26 +98,22 @@ lookat(x, y, buf, monbuf) bhitpos.x = x; bhitpos.y = y; mtmp = m_at(x,y); - if(mtmp != (struct monst *) 0) { - register boolean hp = (mtmp->data == &mons[PM_HIGH_PRIEST]); - char coybuf[QBUFSZ]; - char *name; + if (mtmp != (struct monst *) 0) { + char *name, monnambuf[BUFSZ]; + boolean accurate = !Hallucination; - if (hp && !Hallucination) - name = (mtmp->female ? "high priestess" : "high priest"); - else if (mtmp->data == &mons[PM_COYOTE] && !Hallucination) - name = coyotename(mtmp, coybuf); + if (mtmp->data == &mons[PM_COYOTE] && accurate) + name = coyotename(mtmp, monnambuf); else - name = x_monnam(mtmp, ARTICLE_NONE, (char *)0, 0, TRUE); + name = distant_monnam(mtmp, ARTICLE_NONE, monnambuf); pm = mtmp->data; Sprintf(buf, "%s%s%s", (mtmp->mx != x || mtmp->my != y) ? - ((mtmp->isshk && !Hallucination) + ((mtmp->isshk && accurate) ? "tail of " : "tail of a ") : "", - (!hp && mtmp->mtame && !Hallucination) ? "tame " : - (!hp && mtmp->mpeaceful && !Hallucination) ? - "peaceful " : "", + (mtmp->mtame && accurate) ? "tame " : + (mtmp->mpeaceful && accurate) ? "peaceful " : "", name); if (u.ustuck == mtmp) Strcat(buf, (Upolyd && sticks(youmonst.data)) ?