--- a/hack/config.h +++ b/hack/config.h @@ -63,6 +63,13 @@ #include "pathnames.h" +#ifdef __EMSCRIPTEN__ +/* fredygames.com: keys come from the page (curses-web/curses.c) */ +#include +extern int cw_hack_getchar(void); +#define getchar() cw_hack_getchar() +#endif + #ifndef CONFIG /* make sure the compiler doesnt see the typedefs twice */ #define CONFIG @@ -89,7 +96,7 @@ /* #define NOWAITINCLUDE */ /* neither nor exists */ #define WIZARD "bruno" /* the person allowed to use the -D option */ -#define RECORD "record"/* the file containing the list of topscorers */ +#define RECORD "/hack-saves/record"/* the file containing the list of topscorers (fredygames.com: kept in the browser) */ #define NEWS "news" /* the file containing the latest hack news */ #define HELP "help" /* the file containing a description of the commands */ #define SHELP "hh" /* abbreviated form of the same */ @@ -120,10 +127,10 @@ #define MAILCKFREQ 100 -#define SHELL /* do not delete the '!' command */ +/* fredygames.com: no fork(), so no '!' command: #define SHELL */ #ifdef BSD -#define SUSPEND /* let ^Z suspend the game */ +/* fredygames.com: no job control: #define SUSPEND */ #endif /* BSD */ #endif /* UNIX */ --- a/hack/data +++ b/hack/data @@ -31,95 +31,16 @@ & a demon A a giant ant B a giant bat -C a centaur; - Of all the monsters put together by the Greek imagination - the Centaurs (Kentauroi) constituted a class in themselves. - Despite a strong streak of sensuality in their make-up, - their normal behaviour was moral, and they took a kindly - thought of man's welfare. The attempted outrage of Nessos on - Deianeira, and that of the whole tribe of Centaurs on the - Lapith women, are more than offset by the hospitality of - Pholos and by the wisdom of Cheiron, physician, prophet, - lyrist, and the instructor of Achilles. Further, the Cen- - taurs were peculiar in that their nature, which united the - body of a horse with the trunk and head of a man, involved - an unthinkable duplication of vital organs and important - members. So grotesque a combination seems almost un-Greek. - These strange creatures were said to live in the caves and - clefts of the mountains, myths associating them especially - with the hills of Thessaly and the range of Erymanthos. - [Mythology of all races, Vol. 1, pp. 270-271] -D a dragon; - In the West the dragon was the natural enemy of man. Although - preferring to live in bleak and desolate regions, whenever it was - seen among men it left in its wake a trail of destruction and - disease. Yet any attempt to slay this beast was a perilous under- - taking. For the dragon's assailant had to contend not only with - clouds of sulphurous fumes pouring from its fire-breathing nos- - trils, but also with the thrashings of its tail, the most deadly - part of its serpent-like body. - [From: Mythical Beasts by Deirdre Headon (The Leprechaun Library)] +C a centaur +D a dragon E a floating eye F a freezing sphere -G a gnome; - ... And then a gnome came by, carrying a bundle, an old fellow - three times as large as an imp and wearing clothes of a sort, - especially a hat. And he was clearly just as frightened as the - imps though he could not go so fast. Ramon Alonzo saw that there - must be some great trouble that was vexing magical things; and, - since gnomes speak the language of men, and will answer if spoken - to gently, he raised his hat, and asked of the gnome his name. - The gnome did not stop his hasty shuffle a moment as he answered - 'Alaraba' and grabbed the rim of his hat but forgot to doff it. - 'What is the trouble, Alaraba?' said Ramon Alonzo. - 'White magic. Run!' said the gnome ... - [From: The Charwoman's Shadow, by Lord Dunsany.] -H a hobgoblin; - Hobgoblin. Used by the Puritans and in later times for - wicked goblin spirits, as in Bunyan's 'Hobgoblin nor foul - friend', but its more correct use is for the friendly spir- - its of the brownie type. In 'A midsummer night's dream' a - fairy says to Shakespeare's Puck: - Those that Hobgoblin call you, and sweet Puck, - You do their work, and they shall have good luck: - Are you not he? - and obviously Puck would not wish to be called a hobgoblin - if that was an ill-omened word. - Hobgoblins are on the whole, good-humoured and ready to be - helpful, but fond of practical joking, and like most of the - fairies rather nasty people to annoy. Boggarts hover on the - verge of hobgoblindom. Bogles are just over the edge. - One Hob mentioned by Henderson, was Hob Headless who haunted - the road between Hurworth and Neasham, but could not cross - the little river Kent, which flowed into the Tess. He was - exorcised and laid under a large stone by the roadside for - ninety-nine years and a day. If anyone was so unwary as to - sit on that stone, he would be unable to quit it for ever. - The ninety-nine years is nearly up, so trouble may soon be - heard of on the road between Hurworth and Neasham. - [Katharine Briggs, A dictionary of Fairies] +G a gnome +H a hobgoblin I an invisible stalker J a jackal K a kobold -L a leprechaun; - The Irish Leprechaun is the Faeries' shoemaker and is known - under various names in different parts of Ireland: Cluri- - caune in Cork, Lurican in Kerry, Lurikeen in Kildare and Lu- - rigadaun in Tipperary. Although he works for the Faeries, - the Leprechaun is not of the same species. He is small, has - dark skin and wears strange clothes. His nature has some- - thing of the manic-depressive about it: first he is quite - happy, whistling merrily as he nails a sole on to a shoe; a - few minutes later, he is sullen and morose, drunk on his - home-made heather ale. The Leprechaun's two great loves are - tobacco and whiskey, and he is a first-rate con-man, impos- - sible to out-fox. No one, no matter how clever, has ever - managed to cheat him out of his hidden pot of gold or his - magic shilling. At the last minute he always thinks of some - way to divert his captor's attention and vanishes in the - twinkling of an eye. - [From: A Field Guide to the Little People - by Nancy Arrowsmith & George Moorse. ] +L a leprechaun M a mimic N a nymph O an orc @@ -136,97 +57,30 @@ Z a zombie a an acid blob b a giant beetle -c a cockatrice; - Once in a great while, when the positions of the stars are - just right, a seven-year-old rooster will lay an egg. Then, - along will come a snake, to coil around the egg, or a toad, - to squat upon the egg, keeping it warm and helping it to - hatch. When it hatches, out comes a creature called basil- - isk, or cockatrice, the most deadly of all creatures. A sin- - gle glance from its yellow, piercing toad's eyes will kill - both man and beast. Its power of destruction is said to be - so great that sometimes simply to hear its hiss can prove - fatal. Its breath is so venomous that it causes all vege- - tation to wither. - There is, however, one creature which can withstand the - basilisk's deadly gaze, and this is the weasel. No one knows - why this is so, but although the fierce weasel can slay the - basilisk, it will itself be killed in the struggle. Perhaps - the weasel knows the basilisk's fatal weakness: if it ever - sees its own reflection in a mirror it will perish instant- - ly. But even a dead basilisk is dangerous, for it is said - that merely touching its lifeless body can cause a person to - sicken and die. - [From: Mythical Beasts by Deirdre Headon (The Leprechaun - Library) and other sources. ] +c a cockatrice d a dog e an ettin f a fog cloud g a gelatinous cube h a homunculus -i an imp; - ... imps ... little creatures of two feet high that could - gambol and jump prodigiously; ... - [From: The Charwoman's Shadow, by Lord Dunsany.] - - An 'imp' is an off-shoot or cutting. Thus an 'ymp tree' was - a grafted tree, or one grown from a cutting, not from seed. - 'Imp' properly means a small devil, an off-shoot of Satan, - but the distinction between goblins or bogles and imps from - hell is hard to make, and many in the Celtic countries as - well as the English Puritans regarded all fairies as devils. - The fairies of tradition often hover uneasily between the - ghostly and the diabolic state. - [Katharine Briggs, A dictionary of Fairies] +i an imp j a jaguar k a killer bee l a leocrotta m a minotaur -n a nurse +n a naga o an owlbear p a piercer q a quivering blob r a giant rat s a scorpion -t a tengu; - The tengu was the most troublesome creature of Japanese - legend. Part bird and part man, with red beak for a nose - and flashing eyes, the tengu was notorious for stirring up - feuds and prolonging enmity between families. Indeed, the - belligerent tengus were supposed to have been man's first - instructors in the use of arms. - [From: Mythical Beasts by Deirdre Headon - (The Leprechaun Library). ] -u a unicorn; - Men have always sought the elusive unicorn, for the single - twisted horn which projected from its forehead was thought - to be a powerful talisman. It was said that the unicorn had - simply to dip the tip of its horn in a muddy pool for the - water to become pure. Men also believed that to drink from - this horn was a protection against all sickness, and that if - the horn was ground to a powder it would act as an antidote - to all poisons. Less than 200 years ago in France, the horn - of a unicorn was used in a ceremony to test the royal food - for poison. - Although only the size of a small horse, the unicorn is a - very fierce beast, capable of killing an elephant with a - single thrust from its horn. Its fleetness of foot also - makes this solitary creature difficult to capture. However, - it can be tamed and captured by a maiden. Made gentle by the - sight of a virgin, the unicorn can be lured to lay its head - in her lap, and in this docile mood, the maiden may secure - it with a golden rope. - [From: Mythical Beasts by Deirdre Headon - (The Leprechaun Library). ] +t a tengu +u a unicorn v a violet fungi -w a long worm; - From its teeth the crysknife can be manufactured. +w a long worm ~ the tail of a long worm -x a xan; - The xan were animals sent to prick the legs of the Lords of Xibalba. +x a xan y a yellow light -z a zruty; - The zruty are wild and gigantic beings, living in the wildernesses - of the Tatra mountains. +z a zruty 1 The wizard of Yendor 2 The mail daemon --- a/hack/def.objects.h +++ b/hack/def.objects.h @@ -140,7 +140,7 @@ FOOD("dead killer bee", 0, 1, 1, 10), FOOD("dead leocrotta", 0, 5, 50, 500), FOOD("dead minotaur", 0, 7, 70, 700), - FOOD("dead nurse", 0, 4, 40, 400), + FOOD("dead naga", 0, 4, 40, 400), FOOD("dead owlbear", 0, 7, 70, 700), FOOD("dead piercer", 0, 2, 20, 200), FOOD("dead quivering blob", 0, 1, 10, 100), --- a/hack/extern.h +++ b/hack/extern.h @@ -583,7 +583,7 @@ void setrandom(void); struct tm *getlt(void); int getyear(void); -char *getdate(void); +char *hack_getdate(void); int phase_of_the_moon(void); int night(void); int midnight(void); --- a/hack/hack.bones.c +++ b/hack/hack.bones.c @@ -71,7 +71,7 @@ #include #include -char bones[] = "bones_xx"; +char bones[] = "/hack-saves/bones_xx"; /* save bones and possessions of a deceased adventurer */ void @@ -86,8 +86,8 @@ return; if (!rn2(1 + dlevel / 2)) return; /* not so many ghosts on low levels */ - bones[6] = '0' + (dlevel / 10); - bones[7] = '0' + (dlevel % 10); + bones[18] = '0' + (dlevel / 10); + bones[19] = '0' + (dlevel % 10); if ((fd = open(bones, O_RDONLY)) >= 0) { (void) close(fd); return; @@ -153,8 +153,8 @@ if (rn2(3)) return (0); /* only once in three times do we find bones */ - bones[6] = '0' + dlevel / 10; - bones[7] = '0' + dlevel % 10; + bones[18] = '0' + dlevel / 10; + bones[19] = '0' + dlevel % 10; if ((fd = open(bones, O_RDONLY)) < 0) return (0); if ((ok = uptodate(fd)) != 0) { --- a/hack/hack.end.c +++ b/hack/hack.end.c @@ -328,7 +328,7 @@ FILE *rfile; int flg = 0; #define HUP if(!done_hup) - while (link(recfile, reclock) == -1) { + while (0 && link(recfile, reclock) == -1) { /* fredygames.com: no link() */ HUP perror(reclock); if (!sleepct--) { HUP puts("I give up. Sorry."); @@ -360,7 +360,7 @@ (t0->name)[NAMSZ] = 0; (void) strncpy(t0->death, killer, DTHSZ); (t0->death)[DTHSZ] = 0; - (void) strcpy(t0->date, getdate()); + (void) strcpy(t0->date, hack_getdate()); /* assure minimum number of points */ if (t0->points < POINTSMIN) --- a/hack/hack.ioctl.c +++ b/hack/hack.ioctl.c @@ -79,13 +79,13 @@ void getioctls() { - (void) tcgetattr(fileno(stdin), &termios); + /* fredygames.com: no tty */ } void setioctls() { - (void) tcsetattr(fileno(stdin), TCSADRAIN, &termios); + /* fredygames.com: no tty */ } #ifdef SUSPEND /* implies BSD */ --- a/hack/hack.main.c +++ b/hack/hack.main.c @@ -88,7 +88,7 @@ #ifdef DEF_PAGER const char *catmore; /* default pager */ #endif -char SAVEF[PL_NSIZ + 11] = "save/"; /* save/99999player */ +char SAVEF[PL_NSIZ + 32] = "/hack-saves/"; /* /hack-saves/99999player (fredygames.com: kept in the browser) */ char *hname; /* name of the game (argv[0] of call) */ char obuf[BUFSIZ]; /* BUFSIZ is defined in stdio.h */ @@ -155,6 +155,11 @@ char *s; initoptions(); +#ifdef __EMSCRIPTEN__ + /* fredygames.com: one player per browser; the saved game is kept under this name */ + if (!*plname) + (void) strncpy(plname, "adventurer", sizeof(plname) - 1); +#endif if (!*plname && (s = getenv("USER"))) (void) strncpy(plname, s, sizeof(plname) - 1); if (!*plname && (s = getenv("LOGNAME"))) @@ -308,8 +313,8 @@ } #endif setftty(); - (void) sprintf(SAVEF, "save/%d%s", getuid(), plname); - regularize(SAVEF + 5); /* avoid . or / in name */ + (void) sprintf(SAVEF, "/hack-saves/%d%s", getuid(), plname); + regularize(SAVEF + 12); /* avoid . or / in name */ if ((fd = open(SAVEF, O_RDONLY)) >= 0 && (uptodate(fd) || unlink(SAVEF) == 666)) { (void) signal(SIGINT, done1); --- a/hack/hack.mhitu.c +++ b/hack/hack.mhitu.c @@ -261,7 +261,7 @@ break; case 'N': if (mtmp->mcan && !Blind) { - pline("%s tries to seduce you, but you seem not interested.", + pline("%s tries to charm you, but you seem not interested.", Amonnam(mtmp, "plain")); if (rn2(3)) rloc(mtmp); @@ -271,21 +271,8 @@ } break; case 'n': - if (!uwep && !uarm && !uarmh && !uarms && !uarmg) { - pline("%s hits! (I hope you don't mind)", - Monnam(mtmp)); - u.uhp += rnd(7); - if (!rn2(7)) - u.uhpmax++; - if (u.uhp > u.uhpmax) - u.uhp = u.uhpmax; - flags.botl = 1; - if (!rn2(50)) - rloc(mtmp); - } else { - (void) hitu(mtmp, d(2, 6)); - (void) hitu(mtmp, d(2, 6)); - } + (void) hitu(mtmp, d(2, 6)); + (void) hitu(mtmp, d(2, 6)); break; case 'o': tmp = hitu(mtmp, rnd(6)); --- a/hack/hack.monst.c +++ b/hack/hack.monst.c @@ -126,7 +126,7 @@ {"dragon", 'D', 10, 9, -1, 3, 8, 0}, {"ettin", 'e', 10, 12, 3, 2, 8, 0}, {"lurker above", '\'', 10, 3, 3, 0, 0, 0}, - {"nurse", 'n', 11, 6, 0, 1, 3, 0}, + {"naga", 'n', 11, 6, 0, 1, 3, 0}, {"trapper", ',', 12, 3, 3, 0, 0, 0}, {"purple worm", 'P', 15, 9, 6, 2, 8, 0}, {"demon", '&', 10, 12, -4, 1, 4, 0}, --- a/hack/hack.steal.c +++ b/hack/hack.steal.c @@ -181,8 +181,8 @@ int curssv = otmp->cursed; otmp->cursed = 0; stop_occupation(); - pline("%s seduces you and %s off your %s.", - Amonnam(mtmp, Blind ? "gentle" : "beautiful"), + pline("%s distracts you and %s off your %s.", + Amonnam(mtmp, Blind ? "gentle" : "strange"), otmp->cursed ? "helps you to take" : "you start taking", (otmp == uarmg) ? "gloves" : --- a/hack/hack.termcap.c +++ b/hack/hack.termcap.c @@ -73,6 +73,9 @@ #include #include #include "hack.h" + +extern int napms(int); +extern void cw_ansi_flush(void); #include "extern.h" #include "def.flag.h" /* for flags.nonull */ @@ -94,8 +97,7 @@ tptr = (char *) alloc(1024); tbufptr = tbuf; - if (!(term = getenv("TERM"))) - error("Can't get TERM."); + term = "xterm"; /* fredygames.com: curses-web/termcap.c */ if (!strncmp(term, "5620", 4)) flags.nonull = 1; /* this should be a termcap flag */ if (tgetent(tptr, term) < 1) @@ -331,7 +333,9 @@ /* delay 50 ms - could also use a 'nap'-system call */ /* or the usleep call like this :-) */ - usleep(50000); + (void) fflush(stdout); + cw_ansi_flush(); + napms(50); } void --- a/hack/hack.tty.c +++ b/hack/hack.tty.c @@ -130,19 +130,9 @@ void gettty() { - if (tcgetattr(0, &inittyb) < 0) - perror("Hack (gettty)"); - curttyb = inittyb; - ospeed = cfgetospeed(&inittyb); - erase_char = inittyb.c_cc[VERASE]; - kill_char = inittyb.c_cc[VKILL]; - getioctls(); - - /* do not expand tabs - they might be needed inside a cm sequence */ - if (curttyb.c_oflag & OXTABS) { - curttyb.c_oflag &= ~OXTABS; - setctty(); - } + /* fredygames.com: there is no tty; ^H erases and ^U kills a line */ + erase_char = '\b'; + kill_char = 21; settty_needed = TRUE; } @@ -156,42 +146,21 @@ if (s) printf("%s", s); (void) fflush(stdout); - if (tcsetattr(0, TCSADRAIN, &inittyb) < 0) - perror("Hack (settty)"); - flags.echo = (inittyb.c_lflag & ECHO) ? ON : OFF; - flags.cbreak = (inittyb.c_lflag & ICANON) ? OFF : ON; - setioctls(); + flags.echo = ON; + flags.cbreak = OFF; } void setctty() { - if (tcsetattr(0, TCSADRAIN, &curttyb) < 0) - perror("Hack (setctty)"); } void setftty() { - int change = 0; flags.cbreak = ON; flags.echo = OFF; - /* Should use (ECHO|CRMOD) here instead of ECHO */ - if (curttyb.c_lflag & ECHO) { - curttyb.c_lflag &= ~ECHO; - change++; - } - if (curttyb.c_lflag & ICANON) { - curttyb.c_lflag &= ~ICANON; - /* be satisfied with one character; no timeout */ - curttyb.c_cc[VMIN] = 1; - curttyb.c_cc[VTIME] = 0; - change++; - } - if (change) { - setctty(); - } start_screen(); } --- a/hack/hack.unix.c +++ b/hack/hack.unix.c @@ -118,7 +118,7 @@ } char * -getdate() +hack_getdate() { static char datestr[7]; struct tm *lt = getlt(); @@ -165,49 +165,9 @@ gethdate(name) char *name; { -#if 0 - /* old version - for people short of space */ - - char *np; - - if(stat(name, &hbuf)) - error("Cannot get status of %s.", - (np = strrchr(name, '/')) ? np+1 : name); -#else - /* version using PATH from: seismo!gregc@ucsf-cgl.ARPA (Greg Couch) */ - - - /* - * The problem with #include is that this include file - * does not exist on all systems, and moreover, that it sometimes includes - * again, so that the compiler sees these typedefs twice. - */ -#define MAXPATHLEN 1024 - - const char *np, *path; - char filename[MAXPATHLEN + 1]; - if (strchr(name, '/') != NULL || (path = getenv("PATH")) == NULL) - path = ""; - - for (;;) { - if ((np = strchr(path, ':')) == NULL) - np = path + strlen(path); /* point to end str */ - if (np - path <= 1) /* %% */ - (void) strcpy(filename, name); - else { - (void) strncpy(filename, path, np - path); - filename[np - path] = '/'; - (void) strcpy(filename + (np - path) + 1, name); - } - if (stat(filename, &hbuf) == 0) - return; - if (*np == '\0') - break; - path = np + 1; - } - error("Cannot get status of %s.", - (np = strrchr(name, '/')) ? np + 1 : name); -#endif + /* fredygames.com: there is no executable to take the date from; saved games are always up to date */ + (void) name; + (void) memset(&hbuf, 0, sizeof hbuf); } int @@ -272,57 +232,16 @@ (void) fflush(stdout); - /* we ignore QUIT and INT at this point */ - if (link(HLOCK, LLOCK) == -1) { - int errnosv = errno; - - perror(HLOCK); - printf("Cannot link %s to %s\n", LLOCK, HLOCK); - switch (errnosv) { - case ENOENT: - printf("Perhaps there is no (empty) file %s ?\n", HLOCK); - break; - case EACCES: - printf("It seems you don't have write permission here.\n"); - break; - case EEXIST: - printf("(Try again or rm %s.)\n", LLOCK); - break; - default: - printf("I don't know what is wrong."); - } - getret(); - error("%s", ""); - /* NOTREACHED */ - } + /* fredygames.com: one player per browser, no lock files to fight over (no link()) */ + fd = 0; regularize(lock); glo(0); if (locknum > 25) locknum = 25; - do { - if (locknum) - lock[0] = 'a' + i++; - - if ((fd = open(lock, O_RDONLY)) == -1) { - if (errno == ENOENT) - goto gotlock; /* no such file */ - perror(lock); - (void) unlink(LLOCK); - error("Cannot open %s", lock); - } - if (veryold(fd))/* if true, this closes fd and unlinks lock */ - goto gotlock; - (void) close(fd); - } while (i < locknum); - - (void) unlink(LLOCK); - error(locknum ? "Too many hacks running now." - : "There is a game in progress under your name."); + (void) i; gotlock: fd = creat(lock, FMASK); - if (unlink(LLOCK) == -1) - error("Cannot unlink %s.", LLOCK); if (fd == -1) { error("cannot creat lock file."); } else { --- a/hack/rumors +++ b/hack/rumors @@ -20,18 +20,15 @@ A long worm hits with all of its length. A magic vomit pump is a necessity for gourmands. A monstrous mind is a toy for ever. -A nurse a day keeps the doctor away. A potion of blindness makes you see invisible things. A ring is just a wound wand. A ring of adornment protects against Nymphs. -A ring of conflict is a bad thing if there is a nurse in the room. A ring of extra ringfinger is useless if not enchanted. A ring of stealth can be recognised by that it does not teleport you. A rope may form a trail in a maze. A rumour has it that rumours are just rumours. A scroll of enchant amulet is only useful on your way back. A smoky potion surely affects your vision. -A spear might hit a nurse. A spear will hit an ettin. A staff may recharge if you drop it for awhile. A tin of smoked eel is a wonderful find. @@ -44,7 +41,6 @@ A winner never quits. A quitter never wins. A xan is a small animal. It doesn't reach higher than your leg. Acid blobs should be attacked bare-handed. -Affairs with Nymphs are often very expensive. Afraid of Mimics? Try to wear a ring of true seeing. Afraid of falling piercers? Wear a helmet! After being attacked by a Harpy you have a lot of arrows. @@ -68,7 +64,6 @@ Be careful when eating salmon - your fingers might become greasy. Be careful when the moon is in its last quarter. Be careful when throwing a boomerang - you might hit the back of your head. -Be nice to a nurse: put away your weapon and take off your clothes. Being digested is a painfully slow process. Better go home and hit your kids. They are just little monsters! Better go home and play with your kids. They are just little monsters! @@ -176,7 +171,6 @@ Hungry dogs are unreliable. Hungry? There is an abundance of food on the next level. Hungry? Wear an amulet! -I doubt whether nurses are virgins. I guess you have never hit a postman with an Amulet of Yendor yet... I once knew a hacker who ate too fast and choked to death..... I smell a maze of twisty little passages. @@ -189,11 +183,9 @@ If you are too cute some monsters might be tempted to embrace you. If you can't learn to do it well, learn to enjoy doing it badly. If you need a wand of digging, kindly ask the minotaur. -If you see nurses you better start looking somewhere for a doctor. If you turn blind: don't expect your dog to be turned into a seeing-eye dog. If you want to feel great, you must eat something real big. If you want to float you'd better eat a floating eye. -If you want to genocide nurses, genocide @'s. If you want to hit, use a dagger. If you want to rob a shop, train your dog. If you're afraid of trapdoors, just cover the floor with all you've got. @@ -280,11 +272,6 @@ Not all rumors are as misleading as this one. Not even a spear will hit a Xorn. Now what is it that cures digestion? -Nurses are accustomed to touch naked persons: they don't harm them. -Nurses prefer undressed hackers. -Nymphs and nurses like beautiful rings. -Nymphs are blondes. Are you a gentleman? -Nymphs are very pleased when you call them by their real name: Lorelei. Offering a unicorn a worthless piece of glass might prove to be fatal! Old hackers never die: young ones do. Old trees sometimes fall without a warning! @@ -327,7 +314,6 @@ Reading might improve your scope. Relying on a dog might turn you in a dog addict. Reward your doggie with a giant Bat. -Ropes are made from the long, blond hairs of dead Nymphs. Row (3x) that boat gently down the stream, Charon (4x), death is but a dream. Running is good for your legs. Rust monsters love water. There are potions they hate, however. @@ -356,7 +342,6 @@ Sorry, no fortune this time. Better luck next cookie! Spare your scrolls of make-edible until it's really necessary! Speed Kills (The Doors) -Spinach, carrot, and a melon - a meal fit for a nurse! Stay clear of the level of no return. Suddenly the dungeon will collapse ... Surprise your dog with an acid blob! @@ -455,7 +440,6 @@ Warning: end of file 'fortunes' reached. Warning: people who eat dragons can go to hell!! Watch your steps on staircases. -Wear armor, going naked seems to offend public decency in here. What a pity, you cannot read it! What do you think is the use of dead lizards? What do you think would be the use of a two handed sword called "Orcrist" ?