From mipos3!omepd!littlei!uunet!tektronix!tekgen!tekred!games-request Wed Dec 2 19:38:30 PST 1987 Article 124 of comp.sources.games: Path: td2cad!mipos3!omepd!littlei!uunet!tektronix!tekgen!tekred!games-request From: games-request@tekred.TEK.COM Newsgroups: comp.sources.games Subject: v03i006: NetHack2.2 - display oriented dungeons and dragons, Part06/20 Message-ID: <1889@tekred.TEK.COM> Date: 2 Dec 87 00:40:04 GMT Sender: billr@tekred.TEK.COM Lines: 1684 Approved: billr@tekred.TEK.COM Submitted by: mike@genat.UUCP (Mike Stephenson) Comp.sources.games: Volume 3, Issue 6 Archive-name: nethack2.2/Part06 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh NetHack.cnf <<'END_OF_NetHack.cnf' X# A '#' at the beginning of a line means the rest of the line is a comment. X X# This configuration file is set up for three cases, a person with a hard X# disk as drive C:, 1 person with two floppy disks, and several people X# with two floppy disks. The default configuration is the second one. X# To change configuration, comment out the unwanted configurations, and X# remove the comment from the configuration you want. X X# I use OPTIONS=name:NickD-W, silent, rawio, IBMBIOS X X# A hard disk configuration. X# XHACKDIR=c:\games\nethack XSAVE=c:\games\nethack\bones;n X#RAMDISK=d: XLEVELS=c:\games\nethack\bones XOPTIONS=name:Steve,dogname:Bodacious,rest_on_space,time,IBMBIOS,packorder:%/=?!+)[(*0,endgame:10 t / 2 a,rawio,nopickup X X# A 2-floppy configuration. X# X# HACKDIR=a:\ X# LEVELS=b:\ X# SAVE=b:\ X# OPTIONS=name:Steve-s,rest_on_space,time,IBMBIOS,packorder:%/=?!+)[(*0,endgame:10 t / 2 a,rawio,nopickup X# RAMDISK=c: X X# The 17 GRAPHICS characters (0-16) are: X# stone, vertical wall, horizontal wall, top left corner, top right corner X# bottom left corner, bottom right corner, door, floor, corridor, up stairs, X# down stairs, trap, pool, fountain, throne, web X# An example using the IBM graphics character set. XGRAPHICS = 039 179 196 218 191 192 217 206 250 176 060 062 094 247 202 198 157 X X X# Special section for DEC Rainbow owners. X# X# You *must* include the option `DECRainbow' in the OPTIONS line X# if you want to use line-drawing charcters. Also, you must *not* X# use the option `rawio' or your system will hang! X# X# You can select the "Rainbow line-drawing character set" X# for drawing the dungeon. For *graphics* characters, X# 128 has been added to the decimal value of the character. X# Adding 128 lets PC HACK know you want it to use the line-drawing X# character set. Non-graphical characters are indicated by X# their decimal value. You can mix both types of characters in X# the GRAPHICS line. X# X# A recommended configuration for the Rainbow using the X# line-drawing character set, two floppies and no ramdisk is: X# SAVE=b:\ X# LEVELS=b:\ X# OPTIONS=name:YourName,DECRainbow X# GRAPHICS = 248 241 236 235 237 234 238 254 225 X# this example lists options 1-9, as in the PC Hack version. You should modify X# it (if using a DECRainbow) to have options 0-16 for PC Nethack. --sac X X END_OF_NetHack.cnf if test 2296 -ne `wc -c hack.c <<'END_OF_hack.c' X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ X X#include X#include "hack.h" X#ifdef UNIX Xstatic char SCCS_Id[] = "@(#)hack.c 2.2\t87/12/01"; X#endif Xextern char news0(); Xextern char *nomovemsg; Xextern char *exclam(); Xextern struct obj *addinv(); Xextern boolean hmon(); X X/* called on movement: X 1. when throwing ball+chain far away X 2. when teleporting X 3. when walking out of a lit room X */ Xunsee() { X register x,y; X register struct rm *lev; X X/* X if(u.udispl){ X u.udispl = 0; X newsym(u.udisx, u.udisy); X } X*/ X#ifndef QUEST X if(seehx){ X seehx = 0; X } else X#endif X for(x = u.ux-1; x < u.ux+2; x++) X for(y = u.uy-1; y < u.uy+2; y++) { X if(!isok(x, y)) continue; X lev = &levl[x][y]; X if(!lev->lit && lev->scrsym == ROOM_SYM) { X lev->scrsym = STONE_SYM; X lev->new = 1; X on_scr(x,y); X } X } X} X X/* called: X in apply.c: seeoff(0) - when taking a picture of yourself X - when donning a blindfold X in do.c: seeoff(0) - blind after drinking potion X in do.c: seeoff(1) - go up or down the stairs X in eat.c: seeoff(0) - blind after eating rotten food X in mhitu.c: seeoff(0) - blinded by a yellow light X in mon.c: seeoff(1) - swallowed X in potion.c: seeoff(0) - quaffing or sniffing a potion of blindness X in spell.c: seeoff(0) - due to a cursed spellbook X in trap.c: seeoff(1) - fall through trapdoor X in wizard.c: seeoff(0) - hit by a cream pie. X */ Xseeoff(mode) /* 1 to redo @, 0 to leave them */ X{ /* 1 means misc movement, 0 means blindness */ X register x,y; X register struct rm *lev; X X if(u.udispl && mode){ X u.udispl = 0; X levl[u.udisx][u.udisy].scrsym = news0(u.udisx,u.udisy); X } X#ifndef QUEST X if(seehx) { X seehx = 0; X } else X#endif X if(!mode) { X for(x = u.ux-1; x < u.ux+2; x++) X for(y = u.uy-1; y < u.uy+2; y++) { X if(!isok(x, y)) continue; X lev = &levl[x][y]; X if(!lev->lit && lev->scrsym == ROOM_SYM) X lev->seen = 0; X } X } X} X Xstatic Xmoverock() { X register xchar rx, ry; X register struct obj *otmp; X register struct trap *ttmp; X register struct monst *mtmp; X struct monst *m_at(); X X while(otmp = sobj_at(ENORMOUS_ROCK, u.ux+u.dx, u.uy+u.dy)) { X rx = u.ux+2*u.dx; X ry = u.uy+2*u.dy; X nomul(0); X if(isok(rx,ry) && !IS_ROCK(levl[rx][ry].typ) && X (levl[rx][ry].typ != DOOR || !(u.dx && u.dy)) && X !sobj_at(ENORMOUS_ROCK, rx, ry)) { X if((mtmp = m_at(rx,ry))) { X if(canseemon(mtmp)) X pline("There's %s on the other side.", monnam(mtmp)); X else X pline("You hear a monster behind the rock."); X pline("Perhaps that's why you cannot move it."); X goto cannot_push; X } X if(ttmp = t_at(rx,ry)) X switch(ttmp->ttyp) { X case PIT: X pline("You push the rock into a pit!"); X deltrap(ttmp); X delobj(otmp); X pline("It completely fills the pit!"); X continue; X case TELEP_TRAP: X pline("You push the rock and suddenly it disappears!"); X delobj(otmp); X continue; X } X if(levl[rx][ry].typ == POOL) { X levl[rx][ry].typ = ROOM; X mnewsym(rx,ry); X prl(rx,ry); X pline("You push the rock into the water."); X pline("Now you can cross the water!"); X delobj(otmp); X continue; X } X otmp->ox = rx; X otmp->oy = ry; X /* pobj(otmp); */ X if(cansee(rx,ry)) atl(rx,ry,otmp->olet); X if(Invisible) newsym(u.ux+u.dx, u.uy+u.dy); X X { static long lastmovetime; X /* note: this var contains garbage initially and X after a restore */ X if(moves > lastmovetime+2 || moves < lastmovetime) X pline("With great effort you move the enormous rock."); X lastmovetime = moves; X } X } else { X pline("You try to move the enormous rock, but in vain."); X cannot_push: X#ifdef KAA X if (u.usym=='9') { X# ifdef DGKMOD X if(!flags.pickup) X pline("You easily can push it aside."); X else X# endif X pline("However, you easily can pick it up."); X break; X } X#endif X if((!invent || inv_weight()+90 <= 0) && X (!u.dx || !u.dy || (IS_ROCK(levl[u.ux][u.uy+u.dy].typ) X && IS_ROCK(levl[u.ux+u.dx][u.uy].typ)))){ X pline("However, you can squeeze yourself into a small opening."); X break; X } else X return (-1); X } X } X return (0); X} X Xdomove() X{ X register struct monst *mtmp; X register struct rm *tmpr,*ust; X struct trap *trap; X X u_wipe_engr(rnd(5)); X X if(inv_weight() > 0){ X pline("You collapse under your load."); X nomul(0); X return; X } X if(u.uswallow) { X u.dx = u.dy = 0; X u.ux = u.ustuck->mx; X u.uy = u.ustuck->my; X } else { X if(Confusion) { X do { X confdir(); X } while(!isok(u.ux+u.dx, u.uy+u.dy) || X IS_ROCK(levl[u.ux+u.dx][u.uy+u.dy].typ)); X } X if(!isok(u.ux+u.dx, u.uy+u.dy)){ X nomul(0); X return; X } X } X X ust = &levl[u.ux][u.uy]; X u.ux0 = u.ux; X u.uy0 = u.uy; X if(!u.uswallow && (trap = t_at(u.ux+u.dx, u.uy+u.dy)) && trap->tseen) X nomul(0); X if(u.ustuck && !u.uswallow && (u.ux+u.dx != u.ustuck->mx || X u.uy+u.dy != u.ustuck->my)) { X if(dist(u.ustuck->mx, u.ustuck->my) > 2){ X /* perhaps it fled (or was teleported or ... ) */ X u.ustuck = 0; X } else { X if(Blind) pline("You cannot escape from it!"); X else pline("You cannot escape from %s!", X monnam(u.ustuck)); X nomul(0); X return; X } X } X if(u.uswallow || (mtmp = m_at(u.ux+u.dx,u.uy+u.dy))) { X /* attack monster */ X X#ifdef SAFE_ATTACK X /* Don't attack if you're running */ X if (flags.run && !mtmp->mimic X && (Blind ? Telepat : (!mtmp->minvis || See_invisible))) { X nomul(0); X flags.move = 0; X return; X } X#endif X nomul(0); X gethungry(); X if(multi < 0) return; /* we just fainted */ X X /* try to attack; note that it might evade */ X if(attack(u.uswallow ? u.ustuck : mtmp)) X return; X } X /* not attacking an animal, so we try to move */ X if(u.utrap) { X if(u.utraptype == TT_PIT) { X pline("You are still in a pit."); X u.utrap--; X#ifdef SPIDERS X } else if (u.utraptype == TT_WEB) { X pline("You are stuck to the web."); X u.utrap--; X#endif X } else { X pline("You are caught in a beartrap."); X if((u.dx && u.dy) || !rn2(5)) u.utrap--; X } X return; X } X tmpr = &levl[u.ux+u.dx][u.uy+u.dy]; X if(IS_ROCK(tmpr->typ) || X (u.dx && u.dy && (tmpr->typ == DOOR || ust->typ == DOOR))){ X flags.move = 0; X nomul(0); X return; X } X if(moverock() < 0) return; X if(u.dx && u.dy && IS_ROCK(levl[u.ux][u.uy+u.dy].typ) && X IS_ROCK(levl[u.ux+u.dx][u.uy].typ) && X invent && inv_weight()+40 > 0) { X pline("You are carrying too much to get through."); X nomul(0); X return; X } X if(Punished && X DIST(u.ux+u.dx, u.uy+u.dy, uchain->ox, uchain->oy) > 2){ X if(carried(uball)) { X movobj(uchain, u.ux, u.uy); X goto nodrag; X } X X if(DIST(u.ux+u.dx, u.uy+u.dy, uball->ox, uball->oy) < 3){ X /* leave ball, move chain under/over ball */ X movobj(uchain, uball->ox, uball->oy); X goto nodrag; X } X X if(inv_weight() + (int) uball->owt/2 > 0) { X pline("You cannot %sdrag the heavy iron ball.", X invent ? "carry all that and also " : ""); X nomul(0); X return; X } X X movobj(uball, uchain->ox, uchain->oy); X unpobj(uball); /* BAH %% */ X uchain->ox = u.ux; X uchain->oy = u.uy; X nomul(-2); X nomovemsg = ""; X nodrag: ; X } X u.ux += u.dx; X u.uy += u.dy; X if(flags.run) { X if(tmpr->typ == DOOR || X (xupstair == u.ux && yupstair == u.uy) || X (xdnstair == u.ux && ydnstair == u.uy) X#ifdef FOUNTAINS X || IS_FOUNTAIN(levl[u.ux][u.uy].typ) X#endif X#ifdef NEWCLASS X || IS_THRONE(levl[u.ux][u.uy].typ) X#endif X ) X nomul(0); X } X X if(tmpr->typ == POOL && !Levitation) X drown(); /* not necessarily fatal */ X X/* X if(u.udispl) { X u.udispl = 0; X newsym(u.ux0,u.uy0); X } X*/ X if(!Blind) { X#ifdef QUEST X setsee(); X#else X if(ust->lit) { X if(tmpr->lit) { X if(tmpr->typ == DOOR) X prl1(u.ux+u.dx,u.uy+u.dy); X else if(ust->typ == DOOR) X nose1(u.ux0-u.dx,u.uy0-u.dy); X } else { X unsee(); X prl1(u.ux+u.dx,u.uy+u.dy); X } X } else { X if(tmpr->lit) setsee(); X else { X prl1(u.ux+u.dx,u.uy+u.dy); X if(tmpr->typ == DOOR) { X if(u.dy) { X prl(u.ux-1,u.uy); X prl(u.ux+1,u.uy); X } else { X prl(u.ux,u.uy-1); X prl(u.ux,u.uy+1); X } X } X } X nose1(u.ux0-u.dx,u.uy0-u.dy); X } X#endif /* QUEST /**/ X } else { X pru(); X } X if(!flags.nopick) pickup(1); X if(trap) dotrap(trap); /* fall into pit, arrow trap, etc. */ X (void) inshop(); X if(!Blind) read_engr_at(u.ux,u.uy); X} X Xmovobj(obj, ox, oy) Xregister struct obj *obj; Xregister int ox, oy; X{ X /* Some dirty programming to get display right */ X freeobj(obj); X unpobj(obj); X obj->nobj = fobj; X fobj = obj; X obj->ox = ox; X obj->oy = oy; X} X Xdopickup(){ X /* uswallow case added by GAN 01/29/87 */ X if(u.uswallow) { X pline("You pick up %s's tongue.",monnam(u.ustuck)); X pline("But it's kind of slimy, so you drop it."); X return(1); X } X if(!g_at(u.ux,u.uy) && !o_at(u.ux,u.uy)) { X pline("There is nothing here to pick up."); X return(0); X } X if(Levitation) { X pline("You cannot reach the floor."); X return(1); X } X pickup(0); X return(1); X} X Xpickup(all) X{ X register struct gold *gold; X register struct obj *obj, *obj2; X register int wt; X char buf[BUFSZ]; X register char *ip; X register char sym; X register int oletct = 0, iletct = 0; X char olets[20], ilets[20]; X X if(Levitation) return; X#ifdef DGKMOD X if (all && !flags.pickup) { X int ct = 0; X X for (obj = fobj; obj; obj = obj->nobj) X if (obj->ox == u.ux && obj->oy == u.uy) X if (!Punished || obj != uchain) X ct++; X /* If gold is the only thing here, pick it up. X */ X if (!ct && g_at(u.ux, u.uy)) { X if (flags.run) nomul(0); X while (gold = g_at(u.ux,u.uy)) { X pline("%ld gold piece%s.", gold->amount, X plur(gold->amount)); X u.ugold += gold->amount; X flags.botl = 1; X freegold(gold); X } X if (Invisible) newsym(u.ux,u.uy); X } X X /* If there are objects here, take a look. X */ X if (ct) { X if (flags.run) X nomul(0); X nscr(); X if (ct < 5) X dolook(); X else X pline("There are several objects here."); X } X return; X } X#endif X while(gold = g_at(u.ux,u.uy)) { X pline("%ld gold piece%s.", gold->amount, plur(gold->amount)); X u.ugold += gold->amount; X flags.botl = 1; X freegold(gold); X if(flags.run) nomul(0); X if(Invisible) newsym(u.ux,u.uy); X } X /* check for more than one object */ X if(!all) { X register int ct = 0; X X for(obj = fobj; obj; obj = obj->nobj) X if(obj->ox == u.ux && obj->oy == u.uy) ct++; X if(g_at(u.ux,u.uy)) X ct++; X if(ct < 2) X all++; X else X pline("There are several objects here."); X } X X /* added by GAN 10/24/86 to allow selective picking up */ X if(!all) { X register struct obj *otmp = fobj; X X if(g_at(u.ux,u.uy)) ilets[iletct++] = GOLD_SYM; X ilets[iletct] = 0; X while(otmp) { X if(!index(ilets, otmp->olet) && X otmp->ox == u.ux && otmp->oy == u.uy) { X ilets[iletct++] = otmp->olet; X ilets[iletct] = 0; X } X otmp = otmp->nobj; X } X if(iletct == 1) X strcpy(buf,ilets); X else { X ilets[iletct++] = ' '; X ilets[iletct++] = 'a'; X ilets[iletct++] = 'A'; X ilets[iletct] = 0; X X if(iletct = 3) X pline("What kinds of thing do you want to pick up? [%s] ", ilets); X getlin(buf); X if(buf[0] == '\033') { X clrlin(); X return; X } X#ifdef KJSMODS X else if(!buf[0]) strcpy(buf,"A"); X#endif X } X ip = buf; X olets[0] = 0; X while(sym = *ip++){ X /* new A function (selective all) added by X * GAN 01/09/87 X */ X if(sym == 'A') { X for(oletct = 0; ilets[oletct] != ' '; oletct++) X olets[oletct] = ilets[oletct]; X olets[oletct] = 0; X break; X } X if(sym == ' ') continue; X if(sym == 'a') all++; else X if(index(ilets, sym)){ X if(!index(olets, sym)){ X olets[oletct++] = sym; X olets[oletct] = 0; X } X } X else pline("There are no %c's here.", sym); X } X } X X if(all || index(olets, GOLD_SYM)) X while(gold = g_at(u.ux,u.uy)) { X pline("%ld gold piece%s.", gold->amount, X plur(gold->amount)); X u.ugold += gold->amount; X flags.botl = 1; X freegold(gold); X if(flags.run) nomul(0); X if(Invis) newsym(u.ux,u.uy); X } X X X for(obj = fobj; obj; obj = obj2) { X obj2 = obj->nobj; /* perhaps obj will be picked up */ X if(obj->ox == u.ux && obj->oy == u.uy) { X if(flags.run) nomul(0); X X if(!all) { X char c; X X if(!index(olets,obj->olet)) continue; X X pline("Pick up %s ? [ynaq]", doname(obj)); X while(!index("ynaq ", (c = readchar()))) X bell(); X if(c == 'q') return; X if(c == 'n') continue; X if(c == 'a') all = 1; X } X X if(obj->otyp == DEAD_COCKATRICE && !uarmg && u.usym != 'c') { X pline("Touching the dead cockatrice is a fatal mistake."); X pline("You turn to stone."); X pline("You die..."); X killer = "cockatrice cadaver"; X done("died"); X } X X if(obj->otyp == SCR_SCARE_MONSTER){ X if(!obj->spe) obj->spe = 1; X else { X /* Note: perhaps the 1st pickup failed: you cannot X carry anymore, and so we never dropped it - X lets assume that treading on it twice also X destroys the scroll */ X pline("The scroll turns to dust as you pick it up."); X#ifdef KAA X if(!(objects[SCR_SCARE_MONSTER].oc_name_known) && X !(objects[SCR_SCARE_MONSTER].oc_uname)) X docall(obj); X#endif X delobj(obj); X continue; X } X } X X /* do not pick up uchain */ X if(Punished && obj == uchain) X continue; X X X wt = inv_weight() + obj->owt; X if(wt > 0) { X if(obj->quan > 1) { X /* see how many we can lift */ X extern struct obj *splitobj(); X int savequan = obj->quan; X int iw = inv_weight(); X int qq; X for(qq = 1; qq < savequan; qq++){ X obj->quan = qq; X if(iw + weight(obj) > 0) X break; X } X obj->quan = savequan; X qq--; X /* we can carry qq of them */ X if(!qq) goto too_heavy; X pline("You can only carry %s of the %s lying here.", X (qq == 1) ? "one" : "some", X doname(obj)); X { X register struct obj *obj3; X X obj3 = splitobj(obj, qq); X if(obj3->otyp == SCR_SCARE_MONSTER) X if(obj3->spe) obj->spe = 0; X } X /* note: obj2 is set already, so well never X * encounter the other half; if it should be X * otherwise then write X * obj2 = splitobj(obj,qq); X */ X goto lift_some; X } X too_heavy: X pline("There %s %s here, but %s.", X (obj->quan == 1) ? "is" : "are", X doname(obj), X !invent ? "it is too heavy for you to lift" X /* There is no such word as "anymore". KAA */ X : "you cannot carry any more"); X if(obj->otyp == SCR_SCARE_MONSTER) X if(obj->spe) obj->spe = 0; X break; X } X lift_some: X if(inv_cnt() >= 52) { X pline("Your knapsack cannot accommodate any more items."); X if(obj->otyp == SCR_SCARE_MONSTER) X if(obj->spe) obj->spe = 0; X break; X } X freeobj(obj); X if(Invisible) newsym(u.ux,u.uy); X addtobill(obj); /* sets obj->unpaid if necessary */ X if(wt > -5) pline("You have a little trouble lifting"); X { int pickquan = obj->quan; X int mergquan; X#ifdef KAA X if(!Blind) if(obj->olet != WEAPON_SYM) obj->dknown = 1; X#else X if(!Blind) obj->dknown = 1; /* this is done by prinv(), X but addinv() needs it already for merging */ X#endif X obj = addinv(obj); /* might merge it with other objects */ X mergquan = obj->quan; X obj->quan = pickquan; /* to fool prinv() */ X prinv(obj); X obj->quan = mergquan; X } X } X } X} X X/* stop running if we see something interesting */ X/* turn around a corner if that is the only way we can proceed */ X/* do not turn left or right twice */ Xlookaround(){ Xregister x,y,i,x0,y0,m0,i0 = 9; Xregister int corrct = 0, noturn = 0; Xregister struct monst *mtmp; X#ifdef LINT X /* suppress "used before set" message */ X x0 = y0 = 0; X#endif X if(Blind || flags.run == 0) return; X if(flags.run == 1 && levl[u.ux][u.uy].typ == ROOM) return; X#ifdef QUEST X if(u.ux0 == u.ux+u.dx && u.uy0 == u.uy+u.dy) goto stop; X#endif X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++){ X if(x == u.ux && y == u.uy) continue; X if(!levl[x][y].typ) continue; X if((mtmp = m_at(x,y)) && !mtmp->mimic && X (!mtmp->minvis || See_invisible)){ X if(!mtmp->mtame || (x == u.ux+u.dx && y == u.uy+u.dy)) X goto stop; X } else mtmp = 0; /* invisible M cannot influence us */ X if(x == u.ux-u.dx && y == u.uy-u.dy) continue; X { X register uchar sym = levl[x][y].scrsym; X X if (sym == VWALL_SYM || sym == HWALL_SYM X || sym == ROOM_SYM || sym == STONE_SYM X || IS_CORNER(sym)) X continue; X else if (sym == DOOR_SYM) { X if(x != u.ux && y != u.uy) continue; X if(flags.run != 1) goto stop; X goto corr; X } else if (sym == CORR_SYM) { X corr: X if(flags.run == 1 || flags.run == 3) { X i = DIST(x,y,u.ux+u.dx,u.uy+u.dy); X if(i > 2) continue; X if(corrct == 1 && DIST(x,y,x0,y0) != 1) X noturn = 1; X if(i < i0) { X i0 = i; X x0 = x; X y0 = y; X m0 = mtmp ? 1 : 0; X } X } X corrct++; X continue; X } else if (sym == TRAP_SYM) { X if(flags.run == 1) goto corr; /* if you must */ X if(x == u.ux+u.dx && y == u.uy+u.dy) goto stop; X continue; X } else { /* e.g. objects or trap or stairs */ X if(flags.run == 1) goto corr; X if(mtmp) continue; /* d */ X } X stop: X nomul(0); X return; X } X } X#ifdef QUEST X if(corrct > 0 && (flags.run == 4 || flags.run == 5)) goto stop; X#endif X if(corrct > 1 && flags.run == 2) goto stop; X if((flags.run == 1 || flags.run == 3) && !noturn && !m0 && i0 && X (corrct == 1 || (corrct == 2 && i0 == 1))) { X /* make sure that we do not turn too far */ X if(i0 == 2) { X if(u.dx == y0-u.uy && u.dy == u.ux-x0) X i = 2; /* straight turn right */ X else X i = -2; /* straight turn left */ X } else if(u.dx && u.dy) { X if((u.dx == u.dy && y0 == u.uy) || X (u.dx != u.dy && y0 != u.uy)) X i = -1; /* half turn left */ X else X i = 1; /* half turn right */ X } else { X if((x0-u.ux == y0-u.uy && !u.dy) || X (x0-u.ux != y0-u.uy && u.dy)) X i = 1; /* half turn right */ X else X i = -1; /* half turn left */ X } X i += u.last_str_turn; X if(i <= 2 && i >= -2) { X u.last_str_turn = i; X u.dx = x0-u.ux, u.dy = y0-u.uy; X } X } X} X X/* something like lookaround, but we are not running */ X/* react only to monsters that might hit us */ Xmonster_nearby() { Xregister int x,y; Xregister struct monst *mtmp; X if(!Blind) X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++){ X if(x == u.ux && y == u.uy) continue; X if((mtmp = m_at(x,y)) && !mtmp->mimic && !mtmp->mtame && X !mtmp->mpeaceful && !index("Ea", mtmp->data->mlet) && X !mtmp->mfroz && !mtmp->msleep && /* aplvax!jcn */ X (!mtmp->minvis || See_invisible)) X return(1); X } X return(0); X} X X#ifdef QUEST Xcansee(x,y) xchar x,y; { Xregister int dx,dy,adx,ady,sdx,sdy,dmax,d; X if(Blind) return(0); X if(!isok(x,y)) return(0); X d = dist(x,y); X if(d < 3) return(1); X if(d > u.uhorizon*u.uhorizon) return(0); X if(!levl[x][y].lit) X return(0); X dx = x - u.ux; adx = abs(dx); sdx = sgn(dx); X dy = y - u.uy; ady = abs(dy); sdy = sgn(dy); X if(dx == 0 || dy == 0 || adx == ady){ X dmax = (dx == 0) ? ady : adx; X for(d = 1; d <= dmax; d++) X if(!rroom(sdx*d,sdy*d)) X return(0); X return(1); X } else if(ady > adx){ X for(d = 1; d <= ady; d++){ X if(!rroom(sdx*( (d*adx)/ady ), sdy*d) || X !rroom(sdx*( (d*adx-1)/ady+1 ), sdy*d)) X return(0); X } X return(1); X } else { X for(d = 1; d <= adx; d++){ X if(!rroom(sdx*d, sdy*( (d*ady)/adx )) || X !rroom(sdx*d, sdy*( (d*ady-1)/adx+1 ))) X return(0); X } X return(1); X } X} X Xrroom(x,y) register int x,y; { X return(IS_ROOM(levl[u.ux+x][u.uy+y].typ)); X} X X#else X Xcansee(x,y) xchar x,y; { X if(Blind || u.uswallow) return(0); X if(dist(x,y) < 3) return(1); X if(levl[x][y].lit && seelx <= x && x <= seehx && seely <= y && X y <= seehy) return(1); X return(0); X} X#endif /* QUEST /**/ X Xsgn(a) register int a; { X return((a > 0) ? 1 : (a == 0) ? 0 : -1); X} X X#ifdef QUEST Xsetsee() X{ X register x,y; X X if(Blind) { X pru(); X return; X } X for(y = u.uy-u.uhorizon; y <= u.uy+u.uhorizon; y++) X for(x = u.ux-u.uhorizon; x <= u.ux+u.uhorizon; x++) { X if(cansee(x,y)) X prl(x,y); X } X} X X#else X Xsetsee() X{ X register x,y; X X if(Blind) { X pru(); X return; X } X if(!levl[u.ux][u.uy].lit) { X seelx = u.ux-1; X seehx = u.ux+1; X seely = u.uy-1; X seehy = u.uy+1; X } else { X for(seelx = u.ux; levl[seelx-1][u.uy].lit; seelx--); X for(seehx = u.ux; levl[seehx+1][u.uy].lit; seehx++); X for(seely = u.uy; levl[u.ux][seely-1].lit; seely--); X for(seehy = u.uy; levl[u.ux][seehy+1].lit; seehy++); X } X for(y = seely; y <= seehy; y++) X for(x = seelx; x <= seehx; x++) { X prl(x,y); X } X if(!levl[u.ux][u.uy].lit) seehx = 0; /* seems necessary elsewhere */ X else { X if(seely == u.uy) for(x = u.ux-1; x <= u.ux+1; x++) prl(x,seely-1); X if(seehy == u.uy) for(x = u.ux-1; x <= u.ux+1; x++) prl(x,seehy+1); X if(seelx == u.ux) for(y = u.uy-1; y <= u.uy+1; y++) prl(seelx-1,y); X if(seehx == u.ux) for(y = u.uy-1; y <= u.uy+1; y++) prl(seehx+1,y); X } X} X#endif /* QUEST /**/ X Xnomul(nval) Xregister nval; X{ X#ifdef DGKMOD X if(multi < nval) return; /* This is a bug fix by ab@unido */ X#else X if(multi < 0) return; X#endif X multi = nval; X flags.mv = flags.run = 0; X} X Xabon() X{ X#ifdef KAA X if (u.usym != '@') return(mons[u.umonnum].mlevel-3); X#endif X if(u.ustr == 3) return(-3); X else if(u.ustr < 6) return(-2); X else if(u.ustr < 8) return(-1); X else if(u.ustr < 17) return(0); X else if(u.ustr < 69) return(1); /* up to 18/50 */ X else if(u.ustr < 118) return(2); X else return(3); X} X Xdbon() X{ X if (u.usym != '@') return(0); X X if(u.ustr < 6) return(-1); X else if(u.ustr < 16) return(0); X else if(u.ustr < 18) return(1); X else if(u.ustr == 18) return(2); /* up to 18 */ X else if(u.ustr < 94) return(3); /* up to 18/75 */ X else if(u.ustr < 109) return(4); /* up to 18/90 */ X else if(u.ustr < 118) return(5); /* up to 18/99 */ X else return(6); X} X Xlosestr(num) /* may kill you; cause may be poison or monster like 'A' */ Xregister num; X{ X u.ustr -= num; X while(u.ustr < 3) { X u.ustr++; X u.uhp -= 6; X u.uhpmax -= 6; X } X flags.botl = 1; X} X Xlosehp(n,knam) Xregister n; Xregister char *knam; X{ X#ifdef KAA X if (u.mtimedone) { X u.mh -= n; X if (u.mhmax < u.mh) u.mhmax = u.mh; X flags.botl = 1; X if (u.mh < 1) rehumanize(); X return; X } X#endif X u.uhp -= n; X if(u.uhp > u.uhpmax) X u.uhpmax = u.uhp; /* perhaps n was negative */ X flags.botl = 1; X if(u.uhp < 1) { X killer = knam; /* the thing that killed you */ X pline("You die..."); X done("died"); X } X} X Xlosehp_m(n,mtmp) Xregister n; Xregister struct monst *mtmp; X{ X#ifdef KAA X if (u.mtimedone) { X u.mh -= n; X flags.botl = 1; X if (u.mh < 1) rehumanize(); X return; X } X#endif X u.uhp -= n; X flags.botl = 1; X if(u.uhp < 1) X done_in_by(mtmp); X} X Xlosexp() /* hit by V or W */ X{ X register num; X extern long newuexp(); X X if (u.usym == 'V' || u.usym=='W') return; X X if(u.ulevel > 1) X pline("Goodbye level %u.", u.ulevel--); X else X u.uhp = -1; X num = rnd(10); X u.uhp -= num; X u.uhpmax -= num; X#ifdef SPELLS X num = rnd(u.ulevel/2+1) + 1; /* M. Stephenson */ X u.uen -= num; X if (u.uen < 0) u.uen = 0; X u.uenmax -= num; X if (u.uenmax < 0) u.uenmax = 0; X#endif X u.uexp = newuexp(); X flags.botl = 1; X} X Xinv_weight(){ Xregister struct obj *otmp = invent; Xregister int wt = (u.ugold + 500)/1000; Xregister int carrcap; X#ifdef KAA X if (u.mtimedone) { X if (u.usym == '9') carrcap = MAX_CARR_CAP * 4; X else if (u.usym == 'N') carrcap = MAX_CARR_CAP; X else if (mons[u.umonnum].mlevel <= 3) X carrcap = 5*mons[u.umonnum].mlevel + 30; X else carrcap = 5*mons[u.umonnum].mlevel + 100; X } X#endif X if(Levitation) /* pugh@cornell */ X carrcap = MAX_CARR_CAP; X else { X#ifdef HARD X carrcap = 5*(((u.ustr > 18) ? 20 : u.ustr) + u.ulevel); X#else X carrcap = 5*u.ulevel; /* New strength stewr 870807 */ X if (u.ustr < 19) carrcap += 5*u.ustr; X if (u.ustr > 18) carrcap += u.ustr - 18 + 90; X if (u.ustr > 68) carrcap += u.ustr - 68; X if (u.ustr > 93) carrcap += u.ustr - 93; X if (u.ustr > 108) carrcap += 2*(u.ustr - 108); X if (u.ustr > 113) carrcap += 5*(u.ustr - 113); X if (u.ustr == 118) carrcap += 100; X#endif X if(carrcap > MAX_CARR_CAP) carrcap = MAX_CARR_CAP; X if(Wounded_legs & LEFT_SIDE) carrcap -= 10; X if(Wounded_legs & RIGHT_SIDE) carrcap -= 10; X } X while(otmp){ X wt += otmp->owt; X otmp = otmp->nobj; X } X return(wt - carrcap); X} X Xinv_cnt(){ Xregister struct obj *otmp = invent; Xregister int ct = 0; X while(otmp){ X ct++; X otmp = otmp->nobj; X } X return(ct); X} X Xlong Xnewuexp() X{ X return(10*(1L << (u.ulevel-1))); X} END_OF_hack.c if test 24200 -ne `wc -c rumors.base <<'END_OF_rumors.base' X"Quit" is a four letter word. X"So when I die, the first thing I will see in Heaven is a score list?" X-- more -- X...and rings may protect your fingers. X...and sometimes a piercer drops by. XA Quasit is even faster than a jaguar! XA blindfold can be very useful if you're telepathic XA chameleon imitating a postman often delivers scrolls of fire. XA chameleon imitating a postman sometimes delivers scrolls of punishment. XA clove of garlic a day keeps your best friends away. XA cockatrice's corpse is guaranteed to be untainted! XA confused acid blob may attack. XA dead lizard is a good thing to turn undead. XA dragon is just a Snake that ate a scroll of fire. XA fading corridor enlightens your insight. XA glowing potion is too hot to drink. XA good amulet may protect you against guards. XA homunculus wouldn't want to hurt a wizard. XA jaguar shouldn't frighten you. XA long worm can be defined recursively. So how should you attack it? XA long worm hits with all of its length. XA magic vomit pump is a necessity for gourmands. XA monstrous mind is a toy for ever. XA nurse a day keeps the doctor away. XA potion of blindness makes you see invisible things. XA ring is just a wound wand. XA ring of adornment protects against Nymphs. XA ring of conflict is a bad thing if there is a nurse in the room. XA ring of extra ring finger is useless if not enchanted. XA ring of stealth can be recognized by that it does not teleport you. XA rope may form a trail in a maze. XA rumor has it that rumors are just rumors. XA scroll of enchant amulet is only useful on your way back. XA smoky potion surely affects your vision. XA spear might hit a nurse. XA spear will hit an ettin. XA staff may recharge if you drop it for awhile. XA tin of smoked eel is a wonderful find. XA truly wise man never plays leapfrog with a unicorn. XA two-handed sword usually misses. XA unicorn can be tamed only by a fair maiden. XA visit to the Zoo is very educational; you meet interesting animals. XA wand of deaf is a more dangerous weapon than a wand of sheep. XA wand of vibration might bring the whole cave crashing about your ears. XA winner never quits. A quitter never wins. XA xan is a small animal. It doesn't reach higher than your leg. XAcid blobs should be attacked bare-handed. XAffairs with Nymphs are often very expensive. XAfraid of Mimics? Try to wear a ring of true seeing. XAfraid of falling piercers? Wear a helmet! XAfter being attacked by a Harpy you have a lot of arrows. XAll monsters are created evil, but some are more evil than others. XAlways attack a floating Eye from behind! XAlways be aware of the phase of the moon! XAlways read the info about a monster before dealing with it. XAlways sweep the floor before engraving important messages. XAmulets are hard to make. Even for a wand of wishing. XAn Umber hulk can be a confusing sight. XAn elven cloak is always the height of fashion. XAn elven cloak protects against magic. XAn ettin is hard to kill; an imp is hard to hit. See the difference? XAny small object that is accidentally dropped will hide under a larger object. XAre you blind? Catch a floating Eye! XAsking about monsters may be very useful. XAttack long worms from the rear - that is so much safer! XAttacking an eel when there is none usually is a fatal mistake! XBalrogs only appear on the deeper levels. XBe careful when eating bananas. Monsters might slip on the peels. XBe careful when eating salmon - your fingers might become greasy. XBe careful when the moon is in its last quarter. XBe careful when throwing a boomerang - you might hit the back of your head. XBe nice to a nurse: put away your weapon and take off your clothes. XBeing digested is a painfully slow process. XBetter go home and hit your kids. They are just little monsters! XBetter go home and play with your kids. They are just little monsters! XBetter leave the dungeon, otherwise you might get hurt badly. XBeware of dark rooms - they may be the Morgue. XBeware of death rays! XBeware of falling rocks, wear a helmet! XBeware of hungry dogs! XBeware of the minotaur. He's very horny! XBeware of the potion of nitroglycerin - it's not for the weak of heart. XBeware of wands of instant disaster. XBeware: there's always a chance that your wand explodes as you try to zap it! XBeyond the 23-rd level lies a happy retirement in a room of your own. XBlank scrolls make more interesting reading. XBlind? Eat a carrot! XBooksellers never read scrolls; it might carry them too far away. XBooksellers never read scrolls; it might leave their shop unguarded. XChanging your suit without dropping your sword? You must be kidding! XCockatrices might turn themselves to stone faced with a mirror. XConsumption of home-made food is strictly forbidden in this dungeon. XDark gems are just colored glass. XDark room? Just flash often with your camera. XDark room? Your chance to develop your photographs! XDark rooms are not *completely* dark: just wait and let your eyes adjust... XDead lizards protect against a cockatrice. XDeath is just around the next door. XDeath is life's way of telling you you've been fired. XDescend in order to meet more decent monsters. XDid you know worms had teeth? XDidn't you forget to pay? XDirect a direct hit on your direct opponent, directing in the right direction. XDo something big today: lift a boulder. XDo you want to visit hell? Dig a *very* deep hole. XDogs are attracted by the smell of tripe. XDogs do not eat when the moon is full. XDogs never step on cursed items. XDogs of ghosts aren't angry, just hungry. XDon't bother about money: only Leprechauns and shopkeepers are interested. XDon't create fireballs: they might turn against you. XDon't eat too much: you might start hiccoughing! XDon't forget! Large dogs are MUCH harder to kill than little dogs. XDon't play hack at your work, your boss might hit you! XDon't swim with weapons or armor: they might rust! XDon't tell a soul you found a secret door, otherwise it isn't secret anymore. XDon't throw gems. They are so precious! Besides, you might hit a roommate. XDrinking might affect your health. XDrop your vanity and get rid of your jewels! Pickpockets about! XDungeon expects every monster to do his duty. XDust is an armor of poor quality. XEat 10 cloves of garlic and keep all humans at a two-square distance. XEat a homunculus if you want to avoid sickness. XEating a Wraith is a rewarding experience! XEating a freezing sphere is like eating a yeti. XEating a killer bee is like eating a scorpion. XEating a tengu is like eating a Nymph. XEating unpaid Leprechauns may be advantageous. XEels hide under mud. Use a unicorn to clear the water and make them visible. XElven cloaks cannot rust. XEngrave your wishes with a wand of wishing. XEventually all wands of striking do strike. XEventually you will come to admire the swift elegance of a retreating nymph. XEver fought with an enchanted tooth? XEver heard hissing outside? I *knew* you hadn't! XEver seen a leocrotta dancing the tengu? XEver slept in the arms of a homunculus? XEver tamed a shopkeeper? XEver tried digging through a Vault Guard? XEver tried enchanting a rope? XEver tried to catch a flying boomerang? XEver tried to put a Troll into a large box? XEver wondered why one would want to dip something in a potion? XEvery dog should be a domesticated one. XEvery hand has only one finger to put a ring on. You've got only two hands. So? XEvery level contains a shop; only the entrance is often hidden. XEverybody should have tasted a scorpion at least once in his life. XExpensive cameras have penetrating flashlights. XFeeding the animals is strictly prohibited. The Management. XFeeling lousy? Why don't you drink a potion of tea? XFiery letters might deter monsters. XFirst Law of Hacking: leaving is much more difficult than entering. XFor any remedy there is a misery. XFourth Law of Hacking: you will find the exit at the entrance. XGems are the droppings of other inmates. XGems are the droppings of Umber Hulks. XGems do get a burden. XGenocide on shopkeepers is punishable. XGetting Hungry? Stop wearing rings! XGetting Hungry? Wear an amulet! XGhosts always empty the fridge. XGhosts are visible because they don't leave a trace. XGiant beetles make giant holes in giant trees! XGiving head to a long worm is like a long lasting reception. XGold is a heavy metal. XGood day for overcoming obstacles. Try a steeplechase. XGossip is the opiate of the depressed. XHackers do it with bugs. XHalf Moon tonight. (At least it's better than no Moon at all.) XHandle your flasks carefully - there might be a ghost inside! XHave a good meal today: eat a minotaur. XHey guys, you *WIELD* a dead lizard against a cockatrice! [David London] XHissing is a sound I hate. XHitting is the lingua franca in these regions. XHumans use walking canes when they grow old. XHunger is a confusing experience for a dog! XHungry dogs are unreliable. XHungry? There is an abundance of food on the next level. XHungry? Wear an amulet! XI doubt whether nurses are virgins. XI guess you have never hit a postman with an Amulet of Yendor yet... XI once knew a hacker who ate too fast and choked to death..... XI smell a maze of twisty little passages. XI wished, I never wished a wand of wishing. (Wishful thinking) XIf "nothing happens", something *has* happened anyway!! XIf a chameleon mimics a mace, it really mimics a Mimic mimicking a mace. XIf a shopkeeper kicks you out of his shop, he'll kick you out of the dungeon. XIf you are being punished, it's done with a deadly weapon. XIf you are the shopkeeper you can take things for free. XIf you are too cute some monsters might be tempted to embrace you. XIf you can't learn to do it well, learn to enjoy doing it badly. XIf you need a wand of digging, kindly ask the minotaur. XIf you see nurses you better start looking somewhere for a doctor. XIf you turn blind: don't expect your dog to be turned into a seeing-eye dog. XIf you want to feel great, you must eat something real big. XIf you want to float you'd better eat a floating eye. XIf you want to genocide nurses, genocide @'s. XIf you want to hit, use a dagger. XIf you want to rob a shop, train your dog. XIf you were a troll, would you like looking yourself? XIf you're afraid of trapdoors, just cover the floor with all you've got. XIf you're lost, try buying a map next time you're in a shop. XIf your ghost kills a player, it increases your score. XImportant mail? Be careful that it isn't stolen! XImprove your environment, using a wand of rearrangement. XIn a hurry? Try a ride on a fast moving quasit! XIn a way, a scorpion is like a snake. XIn need of a rest? Quaff a potion of sickness! XIn total, there are nine sorts of shops (sometimes). XIncrease mindpower: Tame your own ghost! XInside a shop you better take a look at the price tags before buying anything. XIt furthers one to see the great man. XIt is bad manners to use a wand in a shop. XIt is not always a good idea to whistle for your dog. XIt is rumored that the Wizard has hired some help. XIt is said that Giant Rabbits can be tamed with carrots only. XIt is said that purple worms and trappers fill the same niche. XIt might be a good idea to offer the unicorn a ruby. XIt seems you keep overlooking a sign reading "No trespassing"! XIt would be peculiarly sad were your dog turned to stone. XIt's all a matter of life and death, so beware of the undead. XIt's bad luck to drown a postman. XIt's bad luck, being punished. XIt's easy to overlook a monster in a wood. XIt's not safe to Save. XJackals are intrinsically rotten. XJust below any trapdoor there may be another one. Just keep falling! XKeep a clear mind: quaff clear potions. XKeep your armors away from rust. XKeep your weaponry away from acids. XKicking the terminal doesn't hurt the monsters. XKill a unicorn and you kill your luck. XKiller bees keep appearing till you kill their queen. XLarge dogs make larger turds than little ones. XLatest news? Put 'rec.games.hack' in your .newsrc ! XLatest news? Put newsgroup 'netUNX.indoor.hackers-scroll' in your .newsrc! XLearn how to spell. Play Hack! XLeather armor cannot rust. XLeprechauns are the most skilled cutpurses in this dungeon. XLeprechauns hide their gold in a secret room. XLet your fingers do the walking on the yulkjhnb keys. XLet's face it: this time you're not going to win. XLet's have a party, drink a lot of booze. XLiquor sellers do not drink; they hate to see you twice. XLooking for a monster -- use a staff of monster summoning. XLooking pale? Quaff a red potion! XM.M.Vault cashiers teleport any amount of gold to the next local branch. XMany monsters make a murdering mob. XMeet yourself! Commit suicide and type "hack" XMeeting your own ghost decreases your luck considerably! XMemory flaw - core dumped. XMoney is the root of all evil. XMoney to invest? Take it to the local branch of the Magic Memory Vault! XMonsters come from nowhere to hit you everywhere. XMonsters sleep because you are boring, not because they ever get tired. XMost monsters can't swim. XMost monsters prefer minced meat. That's why they are hitting you! XMost rumors are just as misleading as this one. XMuch ado Nothing Happens. XMurder complaint? Mail to 'netnix!devil!gamble!freak!trap!lastwill!rip'. XNeed money? Sell your corpses to a tin factory. XNever ask a shopkeeper for a price list. XNever attack a guard. XNever drop a crysknife! No, never even unwield it, until... XNever eat with glowing hands! XNever fight a monster: you might get killed. XNever go into the dungeon at midnight. XNever kick a sleeping dog. XNever kiss an animal. It may cause kissing disease. XNever map the labyrinth. XNever mind the monsters hitting you: they just replace the charwomen. XNever ride a long worm. XNever step on a cursed engraving. XNever swim with a camera: there's nothing to take pictures of. XNever trust a random generator in magic fields. XNever use a wand of death. XNever use your best weapon to engrave a curse. XNever vomit on a door mat. XNo easy fighting with a heavy load! XNo level contains two shops. The maze is no level. So... XNo part of this fortune may be reproduced, stored in a retrieval system, ... XNo weapon is better than a crysknife. XNot all rumors are as misleading as this one. XNot even a spear will hit a Xorn. XNow what is it that cures digestion? XNurses are accustomed to touch naked persons: they don't harm them. XNurses prefer undressed hackers. XNymphs and nurses like beautiful rings. XNymphs are blondes. Are you a gentleman? XNymphs are very pleased when you call them by their real name: Lorelei. XOffering a unicorn a worthless piece of glass might prove to be fatal! XOld hackers never die: young ones do. XOld trees sometimes fall without a warning! XOnce your little dog will be a big dog, and you will be proud of it. XOne can even choke on a fortune cookie! XOne has to leave shops before closing time. XOne homunculus a day keeps the doctor away. XOne level further down somebody is getting killed, right now. XOne wand of concentration equals eight scrolls of create monster. XOnly Today! A dramatic price-cut on slightly used wands. XOnly a Nymph knows how to unlock chains. XOnly a dragon will never get a cold from a wand of cold. XOnly a real dummy would ever call his sword 'Elbereth'. XOnly a wizard can use a magic whistle. XOnly adventurers of evil alignment think of killing their dog. XOnly cave-women can catch a unicorn. And then only with a golden rope. XOnly chaotic evils kill sleeping monsters. XOnly david can find the zoo! XOnly real trappers escape traps. XOnly real wizards can write scrolls. XOnly wizards are able to zap a wand. XOpening a tin is difficult, especially when you are not so strong! XOpening a tin is difficult, especially when you attempt this bare handed! XOperation coded OVERKILL has started now. XOrcs and killer bees share their lifestyle. XOrcs do not procreate in dark rooms. XPLEASE ignore previous rumor. XPlain nymphs are harmless. XPlaying billiards pays when you are in a shop. XPolymorphing your dog probably makes you safer. XPraying will frighten Demons. XPunishment is a thing you call over yourself. So why complain? XPursue the monsters and you will be had indeed. XPut on a ring of teleportation: it will take you away from onslaught. XRays aren't boomerangs, of course, but still... XRead the manual before entering the cave - You might get killed otherwise. XReading Herbert will disgust you, but in one case it might be enlightening. XReading Tolkien might help you. XReading might change your vision. XReading might improve your scope. XRelying on a dog might turn you in a dog addict. XReward your doggie with a giant Bat. XRopes are made from the long, blond hairs of dead Nymphs. XRow (3x) that boat gently down the stream, Charon (4x), death is but a dream. XRunning is good for your legs. XRust monsters love water. There are potions they hate, however. XSavings do include amnesia. XScorpions often hide under tripe rations. XScrew up your courage! You've screwed up everything else. XScrolls of fire are useful against fog clouds. XSecond Law of Hacking: first in, first out. XSelling and rebuying a wand will recharge it. XShopkeepers accept credit cards, as long as you pay cash. XShopkeepers are vegetarians: they only eat Swedes. XShopkeepers can't read, so what use is engraving in a shop? XShopkeepers can't swim. XShopkeepers have incredible patience. XShopkeepers often have strange names. XShopkeepers sometimes die from old age. XSleeping may increase your strength. XSnakes are often found under worthless objects. XSome Balrogs don't attack if you offer them a ring. XSome mazes (especially small ones) have no solutions, says man 6 maze. XSome monsters can be tamed. I once saw a hacker with a tame Dragon! XSome potions are quite mind-expanding. XSome questions Sphinxes ask just *don't* have any answers. XSometimes "mu" is the answer. XSometimes monsters are more likely to fight each other than attack you. XSorry, no fortune this time. Better luck next cookie! XSpare your scrolls of make-edible until it's really necessary! XSpeed Kills (The Doors) XSpinach, carrot, and a melon - a meal fit for a nurse! XStay clear of the level of no return. XSuddenly the dungeon will collapse ... XSurprise your dog with an acid blob! XTainted meat is even more sickening than poison! XTake a long worm from the rear, according to its mate it's a lot more fun. XTame a troll and it will learn you fighting. XTaming a postman may cause a system security violation. XTaming is a gradual process of exercising and rewarding. XTelepathy is just a trick: once you know how to do it, it's easy. XTeleportation lessens your orientation. XThe "pray" command is not yet implemented. XThe Gods are angry with you... XThe Gods seem to be pleased with you... XThe Jackal only eats bad food. XThe Leprechaun Gold Tru$t is no division of the Magic Memory Vault. XThe Leprechauns hide their treasure in a small hidden room. XThe air is positively magic in here. Better wear a negative armor. XThe best equipment for your work is, of course, the most expensive. XThe emptiness of a ghost is too heavy to bear. XThe key to this game is that there are no keys. XThe longer the wand the better. XThe moon is not the only heavenly body to influence this game. XThe postman always rings twice. XThe proof of the quivering blob is in the eating thereof. XThe secret of wands of Nothing Happens: try again! XThe use of dynamite is dangerous. XThere are better information sources than fortune cookies. XThere are monsters of softening penetration. XThere are monsters of striking charity. XThere have been people like you in here; their ghosts seek revenge on you. XThere is a VIP-lounge on this level. Only first-class travellers admitted. XThere is a big treasure hidden in the zoo! XThere is a message concealed in each fortune cookie. XThere is a trap on this level! XThere is more magic in this cave than meets the eye. XThere is no business like throw business. XThere is no harm in praising a large dog. XThere is nothing like eating a Mimic. XThere seem to be monsters of touching benevolence. XThey say a gelatinous cube can paralyze you... XThey say that Elven cloaks absorb enchantments. XThey say that a dagger hits. XThey say that a dog avoids traps. XThey say that a dog can be trained to fetch objects. XThey say that a dog never steps on a cursed object. XThey say that a spear will hit a Dragon. XThey say that a spear will hit a Xorn. XThey say that a spear will hit a neo-otyugh. (Do YOU know what that is?) XThey say that a spear will hit an ettin. XThey say that a two-handed sword misses. XThey say that a unicorn might bring you luck. XThey say that an elven cloak may be worn over your armor. XThey say that an elven cloak protects against magic. XThey say that cavemen seldom find tins in the dungeon. XThey say that dead lizards protect against a cockatrice. XThey say that killing a shopkeeper brings bad luck. XThey say that monsters never step on a scare monster scroll. XThey say that only david can find the zoo! XThey say that shopkeepers often have a large amount of money in their purse. XThey say that the owner of the dungeon might change it slightly. XThey say that the use of dynamite is dangerous. XThey say that the walls in shops are made of extra hard material. XThey say that there is a big treasure hidden in the zoo! XThey say that there is a message concealed in each fortune cookie. XThey say that there is a trap on this level! XThey say that throwing food at a wild dog might tame him. XThey say that you can meet old friends in the caves. XThey say that you can't take your pick-axe into a shop. XThey say that you cannot trust scrolls of rumor. XThey say that you need a key in order to open locked doors. XThey say the Gods don't listen if you pray too much. XThey say the Gods get angry if you kill your dog. XThey say the Gods get angry if you pray too much. XThird Law of Hacking: the last blow counts most. XThis dungeon is restroom equipped (for your convenience). XThis fortune cookie is property of Fortune Cookies, Inc. XThis is not a fortune. XThis is the Leprechaun Law: every purse has a price. XThrowing food at a wild dog might tame him. XTin openers are rare indeed. XTired of irritating bats? Try a scroll of silence. XTo hit or not to hit, that is the question. XTo reach heaven, escape the dungeon while wearing a ring of levitation. XTranquilizers might get you killed. XTravel fast, use some magic speed! XTripe on its own is revolting, but with onions it's delicious! XTry hacking in the wee hours: you will have more room. XTry the fall back end run play against ghosts. XUlch, that meat was painted. XUnwanted mail? Sell it to the bookshop! XVampires hate garlic. XVault guards always make sure you aren't a shopkeeper. XVault guards never disturb their Lords. XVisitors are requested not to apply genocide to shopkeepers. XWARNING from H.M. Govt: Quaffing may be dangerous to your health. XWanna fly? Eat a bat. XWant a hint? Zap a wand of make invisible on your weapon! XWant fun? Throw a potion in a pool and go swimming! XWant to conserve your dead corpses? Go to the tin factory! XWanted: shopkeepers. Send a scroll of mail to: Mage of Yendor/Level 35/Dungeon. XWarning: end of file 'fortunes' reached. XWarning: people who eat dragons can go to hell!! XWatch your steps on staircases. XWear armor, going naked seems to offend public decency in here. XWhat a pity, you cannot read it! XWhat do you think is the use of dead lizards? XWhat do you think would be the use of a two handed sword called "Orcrist" ? XWhen a piercer drops in on you, you will be tempted to hit the ceiling! XWhen in a maze follow the right wall and you will never get lost. XWhen in a shop, do as shopkeepers do. XWhen punished, watch your steps on the stairs! XWhen you have a key, you don't have to wait for the guard. XWhen you have seen one killer bee, you have seen them all. XWhen your dog follows you through a trap door, don't hit it! XWhere do you think all those demons come from? From Hell, of course. XWhere do you think the hell is located? It must be deep, deep down. XWho should ever have thought one could live from eating fog clouds? XWhy a "2" for the postman? Well, how many times does he ring? XWhy should one ever throw an egg to a cockatrice? XWhy would anybody in his sane mind engrave "Elbereth" ? XWish for a master key and open the Magic Memory Vault! XWish for a pass-key and pass all obstacles! XWish for a skeleton-key and open all doors! XWishing too much may bring you too little. XWizards do not sleep. XYou are heading for head-stone for sure. XYou are just the kind of bad food some monsters like to digest. XYou can always wear an elven cloak. XYou can eat what your dog can eat. XYou can get a genuine Amulet of Yendor by doing the following: -- more -- XYou can't get rid of a cursed plate mail with a can-opener. XYou can't leave a shop through the back door: there ain't one! XYou can't see your ugly face if you're blind. XYou cannot ride a long worm. XYou cannot trust scrolls of rumor. XYou die... XYou feel greedy and want more gold? Why don't you try digging? XYou feel like someone is pulling your leg. XYou have to outwit a Sphinx or pay her. XYou may get rich selling letters, but beware of being blackmailed! XYou may have a kick from kicking a little dog. XYou might choke on your food by eating fortune cookies. XYou might cut yourself on a long sword. XYou might trick a shopkeeper if you're invisible. XYou need a key in order to open locked doors. XYou offend Shai-Hulud by sheathing your crysknife without having drawn blood. XYou want to regain strength? Two levels ahead is a guesthouse! XYou'll need a spear if you want to attack a Dragon. XYou've got to know how to put out a yellow light. XYour dog can buy cheaper than you do. XZapping a wand of Nothing Happens doesn't harm you a bit. XZapping a wand of undead turning might bring your dog back to life. END_OF_rumors.base if test 25522 -ne `wc -c